我们看到一个问题,在这个问题上,我们的消息队列的使用者正在从字母范围顶部的队列中接收消息。我们有两个应用程序:一个生产者和一个订户。我们使用的是RabbitMQ 3.6.1。
假设消息队列是这样设置的:

我们的第一个应用程序,生产者,在每个队列中放置100条消息/秒:

我们的第二个应用程序,订阅服务器,有五个唯一的使用者方法,可以处理每个队列上的消息。每个方法都绑定到它各自的队列。订阅服务器的预取值为1,这意味着它一次只能保存一条消息,而不考虑队列。我们可以像这样运行多个订阅者实例:

因此,情况是这样的:每个队列接收100 msg/秒,我们有四个订阅者使用这些消息的实例,因此每个队列有四个使用者。假设使用者方法每个可以处理25 msg/秒。
所发生的情况是,与所有队列被同等使用不同,按字母顺序排列的较高队列反而获得优先级。似乎当订阅者准备就绪时,RabbitMQ会查找这个特定就绪通道所绑定的队列列表,并使用挂起的消息选择第一个队列。
在我们的情况下,A_QUEUE将消耗每一条消息。B_QUEUE可能在特定的争用条件下消耗了一些,但是C_QUEUE/D_QUEUE,特别是E_QUEUE很少被触及。
如果我们关闭发布服务器,队列最终会从上到下耗尽。
是否可以配置 RabbitMQ 本身,甚至可能配置通道来使用某种循环的分发策略,或者甚至是随机策略,以便当信道有许多绑定队列时,所有的消息都挂起,则发行版为偶数?。
发布于 2016-06-09 14:26:49
澄清一下:您有一个有多个使用者的单一订阅者应用程序,对吗?
我猜你在用户应用程序中使用了一个RabbitMQ连接。
您是否也对所有的消费者重复使用单一的RabbitMQ频道?如果是这样的话,那将是一个问题。确保为您启动的每个用户使用一个新的频道。
https://stackoverflow.com/questions/37720312
复制相似问题