首页 文章

Rabbitmq队列的多个使用者是否可能获得相同的消息?

提问于
浏览
2

我负责维护用Golang编写的 生产环境 软件,该软件使用RabbitMq作为其消息队列 .
考虑以下情况:

  • 许多goroutine正在发布到队列名称日志 .

  • 另一组goroutines从队列中读取并将消息写入MongoDB集合 .

  • 每个发布者或消费者分别拥有自己的连接和自己的通道,他们正在无限循环中工作,永不死亡 . (程序启动时 Build 连接和通道 . )

  • autoAckexclusivenoWait 都设置为false, prefetch 设置为20,所有通道的 global 设置为false . 所有队列都是持久的, autoDeleteexclusivenoWait 都设置为false .

基本假设是队列中的每条消息都将传递给一个且只有一个消费者,因此每条消息只会在数据库中插入一次 .
问题是MongoDB集合中有重复的消息 .
我想知道是否有多个消费者获得相同的消息导致他们插入重复项?

1 回答

  • 1

    我可以通过您的设置看到一个案例,其中消息将被多次处理,如果其中一个消费者在某个时刻出现问题 . 情况将遵循这样的情况:

    • Consumer从队列中获取大量消息

    • Consumer开始处理消息

    • Consumer将消息提交给mongodb

    • 由于rabbitmq Channels /连接问题,或其他类型的问题消费者方面,消费者从未确认消息

    • 尚未确认的消息将在队列顶部重新排队

    • 再次处理相同的消息,导致重复

    这种情况应该在您的消费者日志中显示一些错误 .

相关问题