keystone/tactician-deferred

一个允许异步处理命令的 Tactician 中间件

0.1.0 2016-12-30 23:15 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:58:49 UTC


README

Build Status

一个 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();

如果没有配置中间件,命令将像往常一样同步处理,这在开发环境中测试时非常有用,无需担心异步进程。

鸣谢

许可证

在 MIT 许可证下发布。有关详细信息,请参阅捆绑的 LICENSE 文件。