0

我不确定这是否可能:为同一个队列拥有一个信使消费者池?

我尝试使用 Redisconsumer=选项,但事实并非如此。

也许“池”中间件可以对特定传输进行一些路由?

4

1 回答 1

0

是的,您为一个队列使用多个消费者。Symfony Messenger 旨在拥有多个消费者。文档主管部分的示例配置已经有 2 个实例:

主管配置文件通常位于 /etc/supervisor/conf.d 目录中。例如,您可以在那里创建一个新的 messenger-worker.conf 文件,以确保 2 个 messenger:consume 实例始终在运行:

(..)

因此,您可以bin/console messenger:consume async多次运行,并且在大多数情况下,无需额外配置即可运行。有一个关于使用 Redis Transport 和多个 worker 的警告:

如果您使用 Redis Transport,请注意每个工作人员需要一个唯一的使用者名称,以避免多个工作人员处理相同的消息。实现此目的的一种方法是在 Supervisor 配置文件中设置一个环境变量,然后您可以参考messenger.yaml(请参阅上面的 Redis 部分):

environment=MESSENGER_CONSUMER_NAME=%(program_name)s_%(process_num)02d

于 2021-07-22T17:48:33.410 回答