RabbitMQ 批量消费消息并一次性确认它们

7
我有一个RabbitMQ队列,里面有数千条消息。我需要一个后台服务来完成以下操作:
  • 批量检索100个消息
  • 将这100个消息存储到数据库中
  • 一次性确认所有100个消息
  • 继续处理下一个批次的100个消息
我使用RabbitMQ客户端来监听消息,但我不知道如何“分批”获取它们。
请问是否有人能提供一个可行的示例来每次获取100条消息并在保存到数据库后立即进行确认?
非常感谢!
1个回答

10
你想要使用"prefetch"和"multi ack"功能 -
- Prefetch - https://www.rabbitmq.com/consumer-prefetch.html - Multi-ack - https://www.rabbitmq.com/confirms.html#consumer-acks-multiple-parameter 以下是你在代码中需要做的事情:
- 打开一个连接和通道 - 将通道的预取设置为100 - 启动一个消费者。你注册给消费者的回调函数将开始被调用并接收消息。你需要将这些消息保存在列表或其他数据结构中 - 一旦你接收到100条消息,保存第100条消息的传递标签并进行数据库操作 - 通过将"multi ack"设置为true并使用第100条消息的传递标签,确认这100条消息 - RabbitMQ将以相同的方式发送下一批100条消息

StackOverflow的设计适合像这里给出的简单答案。对于任何深入的内容,该格式并不理想,这就是为什么我们将人们引导到邮件列表的原因-https://groups.google.com/forum/#!forum/rabbitmq-users - Luke Bakken
1
RabbitMQ是否可以存储批处理消息,并在达到预取限制时将批处理消息发送给消费者?这样,我们就不需要逐个存储接收到的消息。 - Shahin Ghasemi
@ShahinGhasemi,AMQP协议不是这样工作的。在适当的数据结构中逐个存储消息不应该有问题。您还可以研究RabbitMQ流 - https://www.rabbitmq.com/streams.html - Luke Bakken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接