1

我对如何正确使用 ActiveMQ 有点困惑。

我想要做什么

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

到目前为止我尝试过的

我已阅读有关持久订阅者的信息(http://activemq.apache.org/how-do-durable-queues-and-topics-work.html虚拟主题/队列和持久性)。这似乎符合我的问题描述,并且在做了一些实施之后,一切似乎都按照我最初想要的方式工作。

是什么造成了混乱

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

4

1 回答 1

2

第一个问题是,当虚拟主题的主要目的是发布到主题(例如 VirtualTopic.FOO),然后在匹配的过滤器值(例如 Consumer. A.VirtualTopic.FOO) ?

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

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

无论如何,您最好通过创建队列消费者来按照预期的方式使用虚拟主题,因为这种机制提供了许多优于持久主题订阅的优势。关于虚拟目的地的 ActiveMQ 文档解释了这一切。

于 2015-09-05T20:33:47.703 回答