具有持久订阅主题的ActiveMQ代理网络

具有持久订阅主题的ActiveMQ代理网络,activemq,failover,broker,subscriber,Activemq,Failover,Broker,Subscriber,我的示例JMS布局在这里有一个小问题 我在两台机器上有两个代理(A、B),它们通过网络连接器链接。其思想是制作人可以发送给任何代理,消费者可以收听任何代理,发送给/接收的主题在全球范围内可用 主题有两个持久订户客户端(每台机器上一个),它们都将处理主题中的所有消息。我希望它是一个持久的订阅,以便在必须重新启动进程时,进程不会失去任何工作负载。这两个订阅服务器客户端都配置为具有故障转移代理url,以便它们首先尝试连接到本地主机代理,如果另一个不可用,则尝试连接到本地主机代理。客户端的故障切换似乎正

我的示例JMS布局在这里有一个小问题

我在两台机器上有两个代理(A、B),它们通过网络连接器链接。其思想是制作人可以发送给任何代理,消费者可以收听任何代理,发送给/接收的主题在全球范围内可用

主题有两个持久订户客户端(每台机器上一个),它们都将处理主题中的所有消息。我希望它是一个持久的订阅,以便在必须重新启动进程时,进程不会失去任何工作负载。这两个订阅服务器客户端都配置为具有故障转移代理url,以便它们首先尝试连接到本地主机代理,如果另一个不可用,则尝试连接到本地主机代理。客户端的故障切换似乎正常,但我发现以下情况中存在问题:

每个代理“A”和“B”都有一个订户客户机,该订户客户机与生产者发送给“A”的客户机相连。代理“B”重新启动。“B”的客户端注册连接丢失并切换到“A”B'再次出现,因为它本身已注册为“a”的持久订户,所以它获得消息提要。它现在没有活动的持久订户(“A”现在有三个,包括“B”),并且在达到其连接限制之前会堆积起来

我的配置错误吗?有可能是我的本意吗

干杯, 凯

  • 您正在运行主从配置吗
  • 为什么您希望两个代理同时拥有连接的客户端
  • 如果您使用故障转移连接字符串(标识其中的两个代理),则您的使用者/生产者将使用ActiveMQ故障转移实现,并在需要时连接/重新连接到活动节点。我不认为有两个活动实例和活动客户机是一个好主意,除非您试图复制您的进程(在这种情况下,将没有同步)

    要使两个节点(主节点和从节点)始终具有所需的相同持久数据

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

    它不是主从式,而是一个带有静态发现的()代理网络。基础设施的需求是,我们的消费者和高流量生产商在同一个盒子上。如果代理失败,作为网络上的例外情况,应该允许生产者连接到另一个代理(如果原始代理返回,有没有办法自动将其重新连接到原始代理?),消费者当然也应该这样做。还有一些客户端应该连接到任何网络代理,并从两个代理接收来自生产者的主题消息。为了更清楚地说明问题,我们有两台计算机,每台计算机都有一些生产者和一个消费者,它们还以较低的速率生成消息,并以较少的负载在远程机器上发送给终端客户端。如果其中一台计算机出现故障,最终客户机应该可以轻松地切换到另一个代理,并且仍然拥有大部分功能。