我目前正在开发一种使用RabbitMQ向工作人员传递消息的软件。基本上,这是一项非常简单的任务,因为您可以使用单个队列进行单个直接交换,并且所有工作人员都使用该队列。完成工作。
但现在,情况开始变得复杂。如果有两个额外的要求,那就让我想到:
第一个很容易解决:您只需要确保具有相同标志的消息始终由同一个worker处理,并将其预取设置为1.为了确保您可以使用{{1交换。
第二个也很容易解决:您只需为每个标志使用单独的队列,然后就可以停止处理队列了。
现在,虽然这基本上有效,但它引入了一些问题,而且我不太清楚如何解决它们:
x-consistent-hash
选项设置为1,则事情会变慢,因为我无法并行处理消息。这大大降低了性能。有没有更好的方法来解决这个问题?如果是这样,怎么样?任何想法,提示,......?
答案 0 :(得分:0)
处理具有相同“标志”的所有消息,以便我建议设置具有多个队列的交换,并且交换机根据路由密钥将消息路由到不同的队列(这是路由键设计用于)。这样,您就不需要将预取设置为1,您有一个专用于该路由密钥的队列。
如果您有10k +“标志”,那么您会遇到不同的问题。拥有那么多队列是可能的,但不是很容易维护。你可能有一个“高优先级队列”,其中重要的标志被路由到少数队列,所有其余的“非重要标志”被路由到一个“低优先级队列”?