的RabbitMQ AMQP队列设计(RabbitMQ AMQP queue design)

2019-08-01 02:00发布

下面是队列的期望的设计:

  • P制片人。 该插入数据的应用
  • X交换。
  • C1-C3消费者。 从队列中读取的应用

队列的详细信息:

  • A.就像队列日志,如果没有客户端绑定则消息将被丢弃。
  • B.这是一个工作队列。 它会做什么,如果有标准匹配。
  • C.另外一个工作队列。 它会转换数据

A是可选的,但BC总是会在队列中,直到一些客户端进程连接。

问题是确定汇率,我应该使用哪种类型的。 它是一个扇出,直接或主题? 因为我想在一个队列丢弃消息,如果没有客户端连接,但B&C必须始终保持与时俱进的消息。

并应生产者写一次交流,或者写多的时间与不同的路由键或主题?

Answer 1:

回答这个问题:难道我想所有的队列接收所有邮件?

如果答案是肯定的,那么你应该使用扇出。 如果答案是否定的,那么你应该使用直接或主题。 直接或主题的整点是队列本身将只接收基于匹配路由键绑定的关键信息。

队列A应该由消费者C1被实例化,并设置为自动删除和非耐用。 当C1断开队列这种方式将被删除,该消息将被丢弃。

相反地​​队列B和C应被实例化时,交换是,无论是单独地,或由生产者。 该应设置为不自动删除,可能耐用。 如果您正在使用耐用的队列,你可能希望有持久性消息(不要担心,如果队列中,不存在甚至持久消息不会在这里是一个问题)。 这样,只要生产商开始发送邮件的队列将开始排队起来,并没有消息将被错过,即使消费者没有运行。

无论是使用直接或主题的交流是个人喜好。 据我所知,直接交流应该会更快,而话题的交流让很多具有路由/装订键的灵活性。

我不是100%,您可以通过你的最后一个问题是什么意思。 每条消息只能一次写入到一个交换。 如果使用扇出交流会采取正确的路由消息队列的关怀,就是这样。 如果使用的是直接或主题的交流则其打倒在结合键,以确保每个队列接收到正确的信息。 你不应该需要发送一条消息与多个路由键,如果你希望做这样的事情,那么你已经得到了你的谅解向后东西。 但你可以有多个绑定键从单个队列交流。

简单的例子。 X是一个直接的交流。 B具有绑定密钥黑色,C具有黑色一个结合键和白一个结合键。 P将消息与任一所述路由密钥黑色或白色。 如果是黑色然后B和C将接收该消息,如果是白色,然后是仅含有C将接收它。



文章来源: RabbitMQ AMQP queue design