在ActiveMQ中使用具有虚拟主题的持久订阅者,订阅恢复策略是否可以发挥作用?

时间:2015-09-05 08:28:31

标签: java activemq durability durable-subscription virtual-topic

我对如何正确使用ActiveMQ感到困惑。

我正在尝试做什么

我有系统A,它为虚拟主题生成消息。然后是系统B和C,它们都使用来自同一虚拟主题的消息。系统B或C可能会脱机。因此,当他们重新上线时,我需要他们接收在离线期间生成的所有消息。

到目前为止我尝试了什么

我已阅读有关持久订阅者(http://activemq.apache.org/how-do-durable-queues-and-topics-work.htmlVirtual topics/queues and durability)的信息。这似乎符合我的问题描述,在做了一些实现后,一切似乎都像我最初想要的那样工作。

造成混淆的原因

然后我读到了有关订阅恢复策略(http://activemq.apache.org/subscription-recovery-policy.html)的信息。这是我应该配置的东西还是我完全误解了什么?例如,如果我想存储指定数量的邮件,是应该配置FixedCountSubscriptionRecoveryPolicy还是应该查看一些pendingMessageLimitStrategy

1 个答案:

答案 0 :(得分:2)

第一个问题是当虚拟主题的主要要点发布到主题(例如VirtualTopic.FOO)然后在匹配的过滤器值上创建队列使用者时,为什么在虚拟主题的主题部分使用持久主题订阅?例如Consumer.A.VirtualTopic.FOO)?

关于恢复政策,它们仅适用于与持久主题订阅不同的主题订阅。对于普通的旧主题订阅,发送到主题的消息只有在连接时才会保存在该订阅的代理中,一旦它丢弃了所有正在播放该订阅的消息。订阅恢复策略的作用是创建一个可配置的排序缓存,允许创建主题订阅并获取发送到匹配主题的消息的重放。这对于持久主题订阅是不必要的,因为发送到订阅主题的消息在订阅者离线时存储在代理消息存储中。

恢复策略只能在少数边缘情况下混合到持久的主题订阅中,例如发送到标记为非持久性的主题或第一次订阅的消息,其中某些过去的消息可以从内存中恢复并播放到新的Durable订阅中一种底漆,但它是关于它们在耐用的情况下所有的好处。

无论如何,您最好通过创建Queue使用者的方式使用虚拟主题,因为此机制提供了许多优于持久主题订阅的优势。 Virtual Destinations上的ActiveMQ文档解释了所有这些。