Rabbitmq 跨队列的消息排序
我的RabbitMQ设置中有一个场景,我很想知道如何解决。下图对此进行了说明(为了简洁起见,已删除了交换和大多数队列): 场景Rabbitmq 跨队列的消息排序,rabbitmq,message-queue,distributed-computing,Rabbitmq,Message Queue,Distributed Computing,我的RabbitMQ设置中有一个场景,我很想知道如何解决。下图对此进行了说明(为了简洁起见,已删除了交换和大多数队列): 场景 生产者创建消息A(1),它由顶级消费者接收,后者开始处理消息 生产者创建消息A(2),由底层消费者接收(假设两个消费者都在循环交换中) 底部使用者发布消息B(2),该消息被放入消息B使用者的队列中 可怜的慢顶端消费者最终完成并发出其信息B(1) 问题 如果我们假设B消费者不能成为幂等的,我们如何确保两条B消息的结果都以正确的顺序应用 我曾想过使用一个应用于消息a的初始
对于如何处理这一问题的其他想法,我们将不胜感激。谢谢 我不确定RabbitMQ在这里具体是什么,但是如果您只有一个生产者,那么使用时间戳的想法听起来是一个很好的开始 生产者将时间戳附加到消息a,每个消息B采用其各自消息a的相同时间戳 使用您的方法,某些消息不会被处理,例如消息B(1)。如果所有消息都应由使用者B处理,但它们应以确定性顺序处理,则您可以执行确定性合并: 消费者B配备两个队列,每个消费者A对应一个队列。消费者B始终检查两个队列的顶部:
- 如果两个队列都非空,消费者B将弹出时间戳最低的消息
- 如果至少有一个队列为空,则使用者B等待
- 队列是先进先出的
- 没有进程崩溃
- 通常情况下,最终每个消费者都会处理一条消息
- 消费者B可以以非阻塞方式检查队列顶部