0

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

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

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

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

[更新]

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

我已经多次使用在一次迭代中使用多个消息的概念,但从未使用 php 的 symfony/messenger。

4

2 回答 2

2

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

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

你可以在这里找到更多信息:

于 2022-02-02T06:35:00.967 回答
0

首先我认为你有错误的概念。在队列世界中没有“批量消息”之类的东西。

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

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

于 2020-05-20T21:12:34.293 回答