andreo/eventsauce-messenger

Symfony messenger for EventSauce 消息派发器。

3.1 2023-03-03 17:58 UTC

This package is auto-updated.

Last update: 2024-08-30 01:17:55 UTC


README

集成 symfony messenger 到 EventSauce

安装

composer require andreo/eventsauce-messenger

以前版本文档

需求

  • PHP >=8.2
  • Symfony messenger ^6.2

事件消费

了解更多关于 Event Consumers 的信息

消息处理器示例

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

更多详情

测试应用