Rabbitmq 兔子MQ虚拟主题?

Rabbitmq 兔子MQ虚拟主题?,rabbitmq,virtual-topic,Rabbitmq,Virtual Topic,在Rabbit MQ中,是否存在与活动MQ虚拟主题等效的主题? 或任何其他机制实现队列语义。一些主题订阅者需要在重新联机时发送持久消息,并进行负载平衡 编辑 有多个消费者,他们中很少有人有机会丢失消息,因为他们只在实时的基础上行动;很少有人不需要,因为他们需要历史数据 作为一个简单的例子,每当用户登录失败时,就会从主应用程序发布一条消息。其中一个侦听器会为每一次登录失败发送一封电子邮件,而另一个侦听器则需要在一天内发生5次登录失败时发送一封电子邮件。我对ActiveMQ不是非常熟悉,因此这是一个

在Rabbit MQ中,是否存在与活动MQ虚拟主题等效的主题? 或任何其他机制实现队列语义。一些主题订阅者需要在重新联机时发送持久消息,并进行负载平衡

编辑

有多个消费者,他们中很少有人有机会丢失消息,因为他们只在实时的基础上行动;很少有人不需要,因为他们需要历史数据


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

我对ActiveMQ不是非常熟悉,因此这是一个基于AMQ文档示例的猜测

请看本页:

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

本页:

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

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

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

上面的一个短语代表ActiveMQ:无需重新配置代理

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

如果你需要和RabBMQ坚持下去,你有一些事情要考虑。消息中的持久性?与中一样,持久化到磁盘还是队列中的持久化保持活动状态并保存消息

消息持久性保存到磁盘允许消息在RabbitMQ死亡并重新联机时继续存在。。。也就是说,当消息代理本身下降并恢复时。与在内存中保存消息相比,这是一件非常昂贵的事情。不过,有时候这很重要,值得付出代价

听起来你在谈论队列持久性,不过。。。队列将保持活动状态并继续接收消息,即使队列上没有附加使用者。然后,当使用者再次连接到队列时,它将接收来自队列的消息。这是队列配置的持久和自动删除的组合

当代理停止运行并返回时,持久队列将继续存在。这可能是你想要的

当没有更多的使用者连接到队列时,自动删除队列将删除自身。如果您需要队列在没有消费者的情况下生存,请确保将autodelete设置为false,我认为这是默认设置。但最好是明确的,并将其设置为false

希望有帮助


另外,从物理队列消费虚拟主题的逻辑主题订阅的想法听起来很像选择性消费模式。。。也就是说。

我对ActiveMQ不是非常熟悉,所以这是一个基于AMQ文档示例的猜测

请看本页:

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

本页:

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

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

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

上面的一个短语代表ActiveMQ:无需重新配置代理

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

如果你需要和RabBMQ坚持下去,你有一些事情要考虑。消息中的持久性?与中一样,持久化到磁盘还是队列中的持久化保持活动状态并保存消息

消息持久性保存到磁盘允许消息在RabbitMQ死亡并重新联机时继续存在。。。也就是说,当消息代理本身下降并恢复时。与在内存中保存消息相比,这是一件非常昂贵的事情。不过,有时候这很重要,值得付出代价

听起来你在谈论队列持久性,不过。。。队列将保持活动状态并继续接收消息,即使队列上没有附加使用者。然后,当使用者再次连接到队列时,它将接收来自队列的消息。这是队列配置的持久和自动删除的组合

当代理停止运行并返回时,持久队列将继续存在。这可能是你想要的

当没有更多的使用者连接到队列时,自动删除队列将删除自身。如果您需要队列在没有消费者的情况下生存,请确保将autodelete设置为false,我认为这是默认设置。但最好是明确的,并将其设置为false

希望有帮助


另外,从物理队列消费虚拟主题的逻辑主题订阅的想法听起来很像选择性消费模式。。。这就是。

感谢您提供了非常详细的答案。我希望持久化队列以及该队列上未确认的消息,记住原始源是一个主题。我不认为这是一个选择性消费者的案例。多个应用程序/组件需要侦听消息,其中很少有应用程序/组件有丢失消息的余地,因为它们只在实时基础上运行,所以旧消息是不相关的;很少有人不这样做,因为他们需要保留/处理历史记录。在这种情况下,每个使用者可能都有自己的队列,并使用相同的绑定密钥路由密钥来确保他们获得所有消息。需要所有消息的使用者将使用持久队列。不需要所有消息历史记录的使用者将使用自动删除队列。如果您需要这些消息在rabbitmq崩溃/恢复中生存,那么发送持久消息就可以了。感谢您提供非常详细的答案。我希望持久化队列以及该队列上未确认的消息,记住原始源是一个主题。我不认为这是一个选择性消费者的案例。多个应用程序/组件需要侦听消息,其中很少有应用程序/组件有丢失消息的余地,因为它们只在实时基础上运行,所以旧消息是不相关的;很少有人不这样做,因为他们需要保留/处理历史记录。在这种情况下,每个使用者可能都有自己的队列,并使用相同的绑定密钥路由密钥来确保他们获得所有消息。需要所有消息的使用者将使用持久队列。不需要所有消息历史记录的使用者将使用自动删除队列。如果您需要这些消息在rabbitmq崩溃/恢复中生存,那么发送持久消息就可以做到这一点。