symfony messenger 可以处理 "bulk" 中的消息吗

Can symfony messenger handle messages in "bulk"

我想知道,因为我在 symfony 或其他资源上找不到任何东西,如果 php 的 symfony/messenger 可以使用任何异步传输处理 "bulk" 中的消息。

例如。从总线上抓取 20 条消息,处理这 20 条消息,然后确认或拒绝其中任何一条消息。

我知道 RabbitMQ 有一个功能,可以从队列中抓取 n 条消息,并在一个 运行 中处理所有消息。 在某些情况下,这将比扩展异步工作者有更好的性能。

是否有人对此有任何线索、资源或经验?还是我试图通过违背 symfony/messenger 的想法来解决问题?

[更新]

我知道批量消息不是(异步)消息传递概念的一部分。每条消息都应该单独处理。但是一些消息代理已经实现了一项功能,可以从队列中 "grab" X 数量的消息并处理它们(通过发送确认或拒绝,或其他方式)。我知道在一次迭代中处理多条消息会增加任何消费者的复杂性,但在某些情况下它会提高性能。

我多次使用这种在单次迭代中使用多条消息的概念,但从未在 php 的 symfony/messenger 中使用过。

首先我觉得你的概念是错误的。队列的世界里没有“群发消息”

队列的想法是消费者收到一条消息,消费者负责让队列知道该消息已被确认,因此可以将其删除。如果这在 X 时间内没有发生,则该消息对其他消息再次可见。

如果信使从队列中得到 20 条消息,它仍然会一条一条地处理它们,并且在他完成处理后只是确认每条消息。这 20 条消息对其他消费者“隐藏”了一段时间/这取决于队列的配置/。这个回答也是多个消费者的问题。

在 symfony 5.4 之前这是不可能的。

他们添加了一个 BatchHandlerInterface 允许您批处理(并选择批处理的大小)消息。

您可以在此处找到更多信息: