Rabbit MQ虚拟主题?

时间:2015-07-22 06:20:41

标签: rabbitmq virtual-topic

在Rabbit MQ中,是否存在与Active MQ Virtual Topics相同的内容? 或者任何其他机制实现队列语义。一些主题订阅者需要在他们重新联机时提供持久性消息,并进行负载平衡。

修改

有多个消费者,因为他们只是实时行事,所以很少有消费者会丢失信息;很少有人,因为他们需要历史数据。

作为一个简单的例子,只要用户登录失败,就会从主应用程序中发布消息。其中一个监听器会在每次登录失败时发送一封电子邮件,而另一个监听器则需要在一天内发生5次失败时发送电子邮件。

1 个答案:

答案 0 :(得分:2)

我对ActiveMQ并不是很熟悉,所以根据AMQ的文档示例,这是一个猜测。

查看此页面(http://activemq.apache.org/what-is-the-difference-between-a-virtual-topic-and-a-composite-destination.html):

  

Virtual Topic和Composite Desetination之间的主要区别在于,对于Composite Destination,消费者目标列表是静态和硬连线的。在运行时使用虚拟主题时,可以动态创建新的使用者或队列,并将其添加到订阅中,而无需重新配置代理。

和此页面(http://activemq.apache.org/virtual-destinations.html):

  

但是,如果主题是虚拟的,则消费者可以从物理队列中消费逻辑主题订阅,从而允许许多消费者在许多机器上运行。线程负载平衡负载。

从我在这里阅读的内容来看,ActiveMQ中的虚拟主题已经是RabbitMQ路由密钥和队列绑定的工作方式。

您可以让消息使用者定义具有绑定到交换的队列,并随时订阅该队列。您也可以创建一个包含多个使用者的队列。

上面的一句话,突出了ActiveMQ:"无需重新配置经纪人"

使用RabbitMQ,您始终可以在运行时重新配置代理。经纪人没有单独的设计时间。 RabbitMQ拓扑的整个布局是通过生成和使用消息的相同协议定义的。这为您提供了很大的灵活性,并能够动态创建绑定和队列,并根据需要使用它们。消费者完成后,它可以销毁它创建的队列。无需重新设计或重新启动RabbitMQ。

如果您需要使用RabbitMQ持久化,您需要考虑一些事项。坚持消息? (as-in,持久化到磁盘)或持久存在于队列中并保持消息?

消息持久性(保存到磁盘)允许消息在RabbitMQ死亡并恢复联机时生存......也就是说,当消息代理本身关闭并重新启动时。与在内存中保存消息相比,这是一件非常昂贵的事情。但有时这很重要,并且值得付出代价。

这听起来像是在谈论队列持久性,但是......队列将保持活跃状态​​并继续接收消息,即使队列中没有零消费者也是如此。然后,当消费者再次附加到队列时,它将从队列接收消息。这是"耐用"的组合。和"自动删除"用于队列配置。

当rabbitmq(代理)关闭并重新启动时,持久队列将继续存在。这可能就是你想要的。

" autodelete"当没有更多的消费者连接到队列时,队列将自行删除。如果你需要队列在没有消费者的情况下生存,请确保将autodelete设置为false(我认为这是默认值。但是明确并将其设置为false是件好事)。

希望有所帮助!

P.S。 "从物理队列中消耗逻辑主题订阅的想法"虚拟主题听起来很像选择性消费者"模式......这是an anti-pattern in RabbitMQ