我正在用RabbitMQ编写一个系统。我已经将它用于工作队列,如tutorial中所述。非常简单直接。当我们向队列发布消息时,我知道谁会照顾它:生产者和消费者在一对一的关系中是耦合的(直到现在还可以)。
我现在想做更复杂的事情(消费者和生产者之间的n-m关系):
当我阅读文档时,我不确定如何实现它,特别是我提到的最后一点(竞争消费者)。我对路由密钥,主题和交换感到困惑。对于监控需求,我希望有可预测的队列名称。
感谢您的帮助。
答案 0 :(得分:1)
有几种方法可以做到这一点:
1) 您可以创建一个“主题”交换来路由所有事件。 您为每个使用者类型创建一个队列,并使用路由键(如“type1”,“type2”等)绑定它们。 记录队列可以使用路由密钥“#”绑定,这意味着它将接收所有消息。 同一消费者类型的不同实例应该监听单个队列。通过这种方式,他们将充当“竞争消费者”,这意味着每个消息将由一个消费者实例处理(但您仍然需要消费幂等)。
2) 与#1类似。但是,您为每种消息类型创建一个“扇出”交换,然后将队列绑定到它们。记录队列必须明显地绑定到每个交换。这是一种首选的(惯用的偶数)方法,因为它更快并且允许更好的控制。