creatortsv / symfony-messenger-outbox-pattern
symfony-messenger 组件的出站模式
v1.1.0
2023-12-12 20:49 UTC
Requires
- php: ^8.2|^8.3
- symfony/contracts: ^2.5|^3.4
- symfony/messenger: ^6.4|^7.0
Requires (Dev)
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.8
This package is auto-updated.
Last update: 2024-09-12 22:35:09 UTC
README
此包是 symfony/messenger 组件的扩展,它实现了 事务性出站模式。它提供了一个特殊的中间件,通过出站传输将您的原始消息导航到消息代理
要求
安装
使用 composer 安装
composer require creatortsv/symfony-messenger-outbox-pattern
配置
本指南展示了如何配置 symfony messenger 组件
配置传输
# config/packages/messenger.yaml framework: messenger: transports: ### Your default async message transport for any purpose async: '%env(resolve:MESSENGER_TRANSPORT_DNS)%' ### Outbox transport, for example: ### outbox: '%env(resolve:MESSENGER_TRANSPORT_DNS)%' ### outbox: 'doctrine://%env(resolve:DATABASE_URL)%' ### outbox: 'doctrine://default?table_name=outbox&queue_name=custom' outbox: 'doctrine://default' ### Advance stored outbox transport stored: ### routing: ...
配置消息总线
# config/packages/messenger.yaml framework: messenger: buses: ### Configure message bus that will be used with middleware from this package event.bus: ### Default middlewares must be enabled default_middleware: enabled: true allow_no_handlers: true middleware: ### Add the middleware with configured outbox transport name or/and advanced names ### - Creatortsv\Messenger\Outbox\Middleware\SwitchToOutboxMiddleware: [ outbox, store, logs ] - Creatortsv\Messenger\Outbox\Middleware\SwitchToOutboxMiddleware: [ outbox ] ### transports: ... Outbox transport configuration ### routing: ...
使用方法
readonly class UserService { public function __construct( private EntityManagerInterface $entityManager, private MessageBusInterface $eventBus, ) { // ... } public function register(User $user): void { $this->entityManager->wrapInTransaction( function () use ($user): void { /** Persist user in DB ... */ $this->entityManager->flush(); $this->eventBus->dispatch(new UserRegistered($user->id)); }, ); } }
运行出站消费者
使用出站传输名称运行消费者
php bin/console messenger:consume [name]
每个由工作进程消费的消息将自动发送到原始传输,归功于 SwitchToOutboxMiddleware
类