0

我的示例 JMS 布局在这里有一点问题。

我在两台机器上有两个代理(A,B),它们通过网络连接器链接。这个想法是生产者可以发送到任何代理,消费者可以收听任何代理,并且发送到/接收的主题是全局可用的。

该主题有两个持久的订阅者客户端(每台机器上一个),它们都将处理主题中的所有消息。我希望它是一个持久订阅,以便在必须重新启动进程时进程不会丢失任何工作负载。两个订阅者客户端都配置为具有故障转移代理 url,因此它们首先尝试连接到其 localhost 代理,如果对方不可用。客户端的故障转移似乎可以工作,但我在以下情况下发现了一个问题:

每个代理“A”和“B”都有一个连接的订阅者客户端生产者正在发送到“A”。代理“B”重新启动。“B”的客户端注册连接丢失并切换到“A”。'B' 再次出现,因为它自己已注册为 'A' 的持久订阅者,所以它获得了消息提要。它现在没有活动的持久订阅者(“A”现在有 3 个,包括“B”)并堆积起来,直到达到其连接限制。

我的配置错了吗?这可能是我的意图吗?

干杯,凯

4

1 回答 1

0
  1. 你在运行主从配置吗?
  2. 为什么您希望两个经纪人同时拥有连接的客户端?

如果您使用故障转移连接字符串(标识其中的两个代理),您的消费者/生产者将使用 ActiveMQ 故障转移实现,并在需要时连接/重新连接到活动节点。我不认为有两个活动实例和活动客户端是一个好主意——除非你试图复制你的进程(在这种情况下不会有同步)

要使两个节点(主节点和从节点)始终拥有相同的持久数据,您需要
将消息持久保存到两个节点都可以访问的同一位置。它可以是连接到单个数据库实例(可能在集群后面)的 JDBC 适配器,也可以是带有 KahaDB 共享网络文件夹的 NAS。

于 2012-01-09T19:57:09.013 回答