我使用 Python api 向 RabbitMQ 中插入消息,然后使用 go api 从 RabbitMQ 获取消息。
关键 1:RabbitMQ ACK 因性能原因设置为 false。
我通过 python api 向 RabbitMQ 插入了大约超过 100,000,000 条消息,但是当我使用 go api 获取 消息,我发现消息的插入数不等于获取数。插入操作和
获取操作是并发的。
关键 2:丢失消息率不超过 1,000,000% 1.
插入 Action 有日志,python api显示所有插入消息成功。
get action有log,go api显示所有get message成功。 但数量并不相等。
问题1:我不知道如何找到消息丢失的地方,谁能给我一个建议,如何找到消息丢失的地方?
问题2:有什么策略可以保证消息不丢失吗?
最佳答案
为了测试您的所有消息是否已发布,您可以这样做:
- 停止消费。
- 在发布者中启用确认。在 Python 中,您可以通过在代码中添加额外的行来实现:
channel.confirm_delivery()
。如果消息已发布,这基本上会返回一个 bool 值。您可能希望在basic_publish
中使用mandatory
标志。 - 想发多少就发多少。
- 确保所有
basic_publish()
方法都返回 True。 - 计算 Rabbit 中的消息数。
- 通过执行
no_ack = False
在消费者中启用 Ack - 消费所有消息。
这会让您了解您的消息在哪里丢失了。
关于python - RabbitMQ 消息丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749566/