在我们的系统中,同一网络上有2台分布式计算机,每台计算机都有自己的ActiveMQ代理。其中一个(broker1)只有消费者角色,另一个则在某些状态主题上产生一些数据。我们将ActiveMQ配置设置为多播,这样我们就不需要知道代理的IP地址了。 (正如您将看到我们将逐步添加其他一些消费者,这就是我们的问题开始的地方)我们在broker2处生成一些数据并在broker1中监视它们。一切都很好。
我们添加了聊天功能。我们创建了一个“聊天”主题,broker1和broker2都注册为“聊天”作为生产者和消费者。这也很好。
之后,我们决定添加一台新计算机(broker3)。我们还将其ActiveMQ配置设置为多播。问题是,broker3将一些数据发送到状态主题,并且可以在broker1上看到它们,但是当涉及“chat”时,broker1和broker2再次看到为“chat”生成的所有消息,但broker3仅消耗所生成的消息通过它自己。它不能使用broker1和broker2生成的“chat”消息。我们将broker3的ActiveMQ配置设置为static,将broker1和broker2地址添加为网络连接器。这次,broker3开始监视来自它自己和来自broker1的消息,但它无法监视来自broker2的消息。顺便说一句,broker1和broker2完全按照我们想要的方式工作。
由于这个问题还不够,我们又向网络添加了一台计算机(作为broker4)。无论是在多播还是静态配置中,都可以使用“聊天”消息。它再次只消耗了自己产生的消息。 broker1可以看到broker4发送到状态主题的数据。
以下是计算机的配置:
如您所见,我们为经纪人提供了唯一的名称,我们在所有计算机上关闭了Windows防火墙(我不知道它是否相关,但我做了)。我也尝试将brokerM的64位ActiveMQ服务注册,但它也没有用。
关于网络,在我们公司有一台DHCP服务器,我的桌面上有一个迷你集线器。我在上述场景中提到的所有计算机都是从服务器获取动态IP地址。当我遇到这些问题时,我从集线器插入服务器电缆并将所有计算机IP地址设置为静态。但没有改变。正如我所说,我不知道这些是否相关,但无论如何我都试过了。
我不知道我是在遗漏某些东西还是做错了什么。所以任何帮助都将不胜感激。
此致 Ekip