connectholland/tactician-prioritycommand-plugin

此包已被废弃,不再维护。没有建议的替代包。

Tactician 插件,允许为命令添加优先级,影响命令的执行时间和顺序

0.2.0 2016-04-04 13:04 UTC

This package is auto-updated.

Last update: 2023-05-29 00:49:41 UTC


README

Tactician 插件,允许为命令添加优先级,影响命令的执行时间和顺序

Build Status Coverage Status SensioLabsInsight Latest Stable Version Total Downloads Latest Unstable Version License

概念

该插件添加了中间件,允许您优先处理命令。要为命令设置优先级,让它扩展本库中的某个命令实现

默认支持的命令类型

  • AbstractRequestCommand(总线,你可以绕路,但你不可以开始一个新轮次)
  • AbstractSequenceCommand(总线,你可以绕路,但在我下车之前,没有人下车)
  • AbstractUrgentCommand(尽快带我去目的地)

你可以创建一个事件派发器的接口(symfony 随库附带一个)。你应该将 PriorityMiddleware::REQUEST 队列附加到你始终派发的事件,最好在将输出发送给用户之后。

建议优先级

显然你可以为你想要的命令设置任何优先级,但以下指南可能会有所帮助

  • 紧急:影响你发送给用户的输出或影响传入请求的行为的任何事物
  • 请求:影响你用户的所有后续请求的任何事物
  • 序列:影响后续命令的行为的任何事物(例如,因为它在数据库中设置了一个 ID,其他事物依赖于它)

问题

命令不会立即执行,这使得无法返回值。如果你依赖于命令的返回值,你不能将该命令设置为优先命令,否则会破坏你的应用程序。修复方法是,在将命令放入总线并从处理器派发事件之前添加一个事件监听器,该事件监听器传递返回值。例如,带有返回值的代码

$result = $commandbus->handle($command);
echo "The result is.... {$result}";

没有返回值

$eventdispatcher->addListener('when_my_commandhandler_is_done', function($event) {
    echo "The result is.... {$event->getReturnValue()}";
});
$result = $commandbus->handle($priorityCommand);