connectholland / tactician-prioritycommand-plugin
此包已被废弃,不再维护。没有建议的替代包。
Tactician 插件,允许为命令添加优先级,影响命令的执行时间和顺序
0.2.0
2016-04-04 13:04 UTC
Requires
- league/tactician: ^0.6 | ^1.0
Requires (Dev)
- phpunit/phpunit: ^4.7
- satooshi/php-coveralls: ^0.6.1
- squizlabs/php_codesniffer: ^2.3
- symfony/event-dispatcher: ^2.7
This package is auto-updated.
Last update: 2023-05-29 00:49:41 UTC
README
Tactician 插件,允许为命令添加优先级,影响命令的执行时间和顺序
概念
该插件添加了中间件,允许您优先处理命令。要为命令设置优先级,让它扩展本库中的某个命令实现
默认支持的命令类型
- 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);