如何在代理网络中使用持久订阅
常见问题解答 > 使用 Apache ActiveMQ Classic > 如何在代理网络中使用持久订阅
持久订阅在 ActiveMQ Classic 代理集群中的行为略有不同。两个主要问题围绕着在持久订阅断开连接后重新连接到网络中的另一个代理(而没有完全取消订阅)时,消息卡在网络中的其他代理上的情况。断开连接/重新连接的原因可以是自愿的(订阅者使用故障转移传输),也可以是强制的(集群中的一个代理发生故障)。
例如,如果您有两个代理 A 和 B 在两个方向上相互连接以形成一个集群,并且一个持久订阅者连接到代理 B,则代理 A 上的生产者 P 将会将其消息正确地转发到代理 B 和持久订阅者。但是,如果订阅者断开连接并重新连接到代理 A,则订阅者离开期间 P 发送的任何消息都将卡在 B 上,直到订阅者重新连接到 B。
解决方案是使用 虚拟目标
虚拟主题在幕后使用队列,这使 ActiveMQ Classic 可以将每个订阅者视为一个普通的队列订阅者。这使 ActiveMQ Classic 可以使用此配置(如 代理网络 文档中所述)重播已在集群中另一个代理上成为孤儿的邮件。
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue="TEST.>" enableAudit="false">
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
此外,请查看 此单元测试以查看完整的配置和用法