keystone / tactician-deferred
一个允许异步处理命令的 Tactician 中间件
0.1.0
2016-12-30 23:15 UTC
Requires
- php: >=5.6
- league/tactician: ^1.0
- radish/radish: ^0.2
Requires (Dev)
- keystone/mockery-callable-mock: ^1.0
- mockery/mockery: ^0.9
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-14 19:58:49 UTC
README
一个 Tactician 中间件,使用 Keystone Queue 允许异步处理命令。
特性
- 无干扰的 API,允许异步处理命令。
- 将命令消息发布到任何队列。
- 命令在失败时可以重试。
安装
通过 Composer 安装
composer require --dev keystone/tactician-deferred
使用方法
创建一个实现了 DeferrableCommand
的命令类,以告诉中间件异步处理它。
use Keystone\Tactician\Deferred\Command\DeferrableCommand; class SendWelcomeCommand implements DeferrableCommand { public $email; public $name; public function __construct(string $email, string $name) { $this->email = $email; $this->name = $name; } public function getKey(): string { // The command key is used to determine which queue to publish to. return 'email'; } }
使用你想要的屈折方法创建命令处理器。
class SendWelcomeHandler { public function handle(SendWelcomeCommand $command) { // Send the welcome } }
当命令被命令总线处理时,中间件将向队列发布消息并停止处理器。然后,消息将被消费者接收,并且工作器将命令委托给命令总线。由于命令将在队列中序列化,其属性应该是简单的标量值。
$commandBus = new CommandBus([new DeferredMiddleware(...), new CommandHandlerMiddleware(...)]); $commandBus->handle(new SendWelcomeCommand('ben@flowerpots.com', 'Ben'));
在长运行过程中消费消息(有关更多信息,请参阅 Keystone Queue)。
use Keystone\Queue\Consumer; use Keystone\Queue\Provider; $provider = new Provider(...); $consumer = new Consumer($provider, ...); // The consumer will poll the queue for new messages and process them. $consumer->consume();
如果没有配置中间件,命令将像往常一样同步处理,这在开发环境中测试时非常有用,无需担心异步进程。
鸣谢
- Tom Graham(维护者)
许可证
在 MIT 许可证下发布。有关详细信息,请参阅捆绑的 LICENSE 文件。