我的示例JMS布局有点问题。
我在两台机器上有两个代理(A,B),它们通过网络连接器链接。这个想法是生产者可以发送给任何经纪人,消费者可以听取任何经纪人的意见,并且发送/接收的主题在全球范围内可用。
该主题有两个持久的订阅者客户端(每台计算机上一个),它们都将处理主题中的所有消息。我希望它是一个持久的订阅,以便在必须重新启动进程时进程不会丢失任何工作负载。两个订户客户端都配置为具有故障转移代理URL,以便它们首先尝试连接到其localhost代理,如果另一个不可用。客户端的故障转移似乎有效,但我发现在以下情况下存在问题:
每个经纪人'A'和'B'都连接了一个订户客户端。生产者正在发送给'A'。经纪人'B'重新启动。 'B'的客户端注册连接丢失并切换到'A'。 'B'再次出现,因为它自己注册为'A'的持久订阅者,它获得了消息提要。它现在没有活跃的持久用户('A'现在有三个,包括'B')并且堆积到达其连接限制。
我的配置错了吗?有可能是我的意图吗?
干杯, 启
答案 0 :(得分:0)
如果您使用故障转移连接字符串(标识其中的两个代理),您的使用者/生产者将使用ActiveMQ故障转移实现,并在需要时连接/重新连接到活动节点。我不认为有两个活动客户端的活动实例是一个好主意 - 除非你试图复制你的进程(在这种情况下将没有同步)
要使两个节点(主节点和从节点)始终具有您需要的相同持久数据 将您的消息持久保存到两个节点都可访问的相同位置。它可以是连接到单个数据库实例的JDBC适配器(可能在集群后面),也可以是带有KahaDB共享网络文件夹的NAS。