尽管在 Symfony Messenger 中将处理程序路由配置为异步,但仍未异步发送消息
Message not dispatched async despite configuring the handler route to be async in Symfony Messenger
我正在使用 Symfony 4.4 和 Symfony Messenger
Messenger 配置包括传输和路由:
messenger:
failure_transport: failed
transports:
async_medium:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
retry_strategy:
max_retries: 3
delay: 1000
failed:
...
routing:
'Name\Space\MessageHandler\SnowplowNotificationHandler': async_medium
虽然处理程序看起来配置正确(当我 运行 控制台 debug:messenger 它显示正确分配给传输)
Messenger
messenger.bus.default
The following messages can be dispatched:
Name\Space\Message\SnowplowMessage
handled by Name\Space\MessageHandler\SnowplowEmailNotificationHandler
消息 class SnowplowMessage
没有排队,而是立即发送到处理程序的 _invoke()
方法。
我正在使用 AMQP(RabbitMQ 作为传输)并且它配置正确,因为没有显示任何错误并且命令控制台 messenger:setup-传输正确创建队列
出于某种原因,这似乎是一个经常发生的错误,所以我宁愿post回答而不是评论。
您应该将 message 类 添加到路由配置, 而不是处理程序 类。
如果您希望异步管理该消息,您的配置应该是:
routing:
Name\Space\Message\SnowplowMessage: async_medium
您正在路由的是消息。由于缺少上述配置,默认路由正在同步处理消息。
我正在使用 Symfony 4.4 和 Symfony Messenger
Messenger 配置包括传输和路由:
messenger:
failure_transport: failed
transports:
async_medium:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
retry_strategy:
max_retries: 3
delay: 1000
failed:
...
routing:
'Name\Space\MessageHandler\SnowplowNotificationHandler': async_medium
虽然处理程序看起来配置正确(当我 运行 控制台 debug:messenger 它显示正确分配给传输)
Messenger
messenger.bus.default
The following messages can be dispatched:
Name\Space\Message\SnowplowMessage
handled by Name\Space\MessageHandler\SnowplowEmailNotificationHandler
消息 class SnowplowMessage
没有排队,而是立即发送到处理程序的 _invoke()
方法。
我正在使用 AMQP(RabbitMQ 作为传输)并且它配置正确,因为没有显示任何错误并且命令控制台 messenger:setup-传输正确创建队列
出于某种原因,这似乎是一个经常发生的错误,所以我宁愿post回答而不是评论。
您应该将 message 类 添加到路由配置, 而不是处理程序 类。
如果您希望异步管理该消息,您的配置应该是:
routing:
Name\Space\Message\SnowplowMessage: async_medium
您正在路由的是消息。由于缺少上述配置,默认路由正在同步处理消息。