andreo/ eventsauce-messenger
Symfony messenger for EventSauce 消息派发器。
3.1
2023-03-03 17:58 UTC
Requires
- php: >=8.2
- eventsauce/eventsauce: ^3.0
- symfony/dependency-injection: ^6.2
- symfony/messenger: ^6.2
Requires (Dev)
- phpstan/phpstan: ^1.3
- phpunit/phpunit: ^9.4
- roave/security-advisories: dev-latest
- symfony/amqp-messenger: ^6.1
- symfony/framework-bundle: ^6.1
README
集成 symfony messenger 到 EventSauce
安装
composer require andreo/eventsauce-messenger
以前版本文档
需求
- PHP >=8.2
- Symfony messenger ^6.2
事件消费
消息处理器示例
use Andreo\EventSauce\Messenger\EventConsumer\InjectedHandleMethodInflector; use EventSauce\EventSourcing\EventConsumption\EventConsumer; use EventSauce\EventSourcing\EventConsumption\HandleMethodInflector; use Andreo\EventSauce\Messenger\Attribute\AsEventSauceMessageHandler; use EventSauce\EventSourcing\Message; final class FooBarBazMessageHandler extends EventConsumer { // copy-paste trait for inject HandleMethodInflector of EventSauce // This example use EventSauce\EventSourcing\EventConsumption\InflectHandlerMethodsFromType. Remember, register your way use InjectedHandleMethodInflector; public function __construct( private HandleMethodInflector $handleMethodInflector ) {} #[AsEventSauceMessageHandler(bus: 'eventBus')] public function onFooCreated(FooCreated $fooCreated, Message $message): void { } // You can define more handlers also union types(only with InflectHandlerMethodsFromType) if you want as below #[AsEventSauceMessageHandler(bus: 'eventBus')] public function onBarOrBazCreated(BarCreated|BazCreated $barCreated, Message $message): void { } }
配置
AsEventSauceMessageHandler
属性与 symfony 自动配置功能一起工作。如果你想使用它,需要注册属性。
use Andreo\EventSauce\Messenger\DependencyInjection\RegisterEventSauceMessageHandlerAttribute; class Kernel extends BaseKernel { use MicroKernelTrait; protected function build(ContainerBuilder $container): void { RegisterEventSauceMessageHandlerAttribute::register($container); } }
如果你不想使用自动配置,你可以手动注册处理器。
services: # ... App\Handler\FooBarBazMessageHandler: tags: - name: messenger.message_handler handles: App\Message\FooCreated bus: eventBus method: handle # must be set handle method of EventSauce EventConsumer - name: messenger.message_handler handles: App\Message\BarCreated bus: eventBus method: handle - name: messenger.message_handler handles: App\Message\BazCreated bus: eventBus method: handle
剩余配置
你的服务
services: # ... Andreo\EventSauce\Messenger\Dispatcher\MessengerMessageDispatcher: arguments: $eventBus: 'eventBus' # bus alias from messenger config Andreo\EventSauce\Messenger\Middleware\HandleEventSauceMessageMiddleware: arguments: # change handlers locator prefix to your bus alias from messenger config $handlersLocator: '@eventBus.messenger.handlers_locator'
Messenger 配置
framework: messenger: # ... buses: eventBus: # disable default config of messenger middleware default_middleware: false # minimal middleware config. Note that there are other middleware you may want to use - check messenger docs middleware: - 'send_message' - 'Andreo\EventSauce\Messenger\Middleware\HandleEventSauceMessageMiddleware' - 'handle_message' # if you want to use default handling also, this middleware must be last set