RabbitMQ路由,主题和分发工作

时间:2014-05-21 10:02:32

标签: rabbitmq amqp

我正在用RabbitMQ编写一个系统。我已经将它用于工作队列,如tutorial中所述。非常简单直接。当我们向队列发布消息时,我知道谁会照顾它:生产者和消费者在一对一的关系中是耦合的(直到现在还可以)。

我现在想做更复杂的事情(消费者和生产者之间的n-m关系):

  • 制作人发布消息,不知道将用它做什么。 (发送活动)
  • 不同的消费者类型在同一消息上做不同的事情(例如,统计和记录)
  • 我们可以运行几个消费者类型的实例(假设3个统计消费者和2个记录消费者)
  • 所有消费者类型都可以处理每条消息
  • 每个消费者类型(竞争消费者)必须处理一次消息

当我阅读文档时,我不确定如何实现它,特别是我提到的最后一点(竞争消费者)。我对路由密钥,主题和交换感到困惑。对于监控需求,我希望有可预测的队列名称。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点:

1) 您可以创建一个“主题”交换来路由所有事件。 您为每个使用者类型创建一个队列,并使用路由键(如“type1”,“type2”等)绑定它们。 记录队列可以使用路由密钥“#”绑定,这意味着它将接收所有消息。 同一消费者类型的不同实例应该监听单个队列。通过这种方式,他们将充当“竞争消费者”,这意味着每个消息将由一个消费者实例处理(但您仍然需要消费幂等)。

2) 与#1类似。但是,您为每种消息类型创建一个“扇出”交换,然后将队列绑定到它们。记录队列必须明显地绑定到每个交换。这是一种首选的(惯用的偶数)方法,因为它更快并且允许更好的控制。