【问题标题】:RabbitMQ routing, topics and distributing workRabbitMQ 路由、主题和分发工作
【发布时间】:2014-07-09 21:43:34
【问题描述】:

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

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

  • 生产者发布消息,但不知道如何处理它。 (发送事件)
  • 不同的消费者类型对同一条消息执行不同的操作(例如,统计信息和日志记录)
  • 我们可以运行多个消费者类型的实例(比如 3 个统计消费者和 2 个日志消费者)
  • 所有消费者类型都可以处理每条消息
  • 每条消息必须由每个消费者类型(竞争消费者)处理一次

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

感谢您的帮助。

【问题讨论】:

标签: rabbitmq amqp


【解决方案1】:

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

1) 您创建一个单一的“主题”交换来路由您的所有事件。 您为每种消费者类型创建一个队列并使用路由键(如“type1”、“type2”等)绑定它们。 日志队列可以与路由键“#”绑定,这意味着它将接收所有消息。 相同消费者类型的不同实例应该监听单个队列。这样他们将充当“竞争消费者”,这意味着每条消息将由一个消费者实例处理(但您仍然必须使消费具有幂等性)。

2) 类似于#1。但是您为每种消息类型创建一个“扇出”交换,然后将队列绑定到它们。日志队列显然必须绑定到每个交换。这是一种首选的(甚至是惯用的)方法,因为它更快并且可以更好地控制。

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 2015-03-31
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2016-06-12
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多