添加多个代理后,为什么此ActiveMQ代理配置失败?

时间:2018-03-01 15:03:08

标签: activemq

软件和配置:

  • ActiveMQ 5.14.0,Java 8
  • 所有经纪人只有非持久性主题;咨询信息已经开启。
  • 操作系统:Linux(RHEL 6)

一些术语:

  • 我们拥有使用代理与Web服务器通信的无头Java应用程序(服务)。他们使用Java插件框架(JPF)。每个服务都连接到自己的个人经纪人,并订阅该服务特有的单个主题(“特定于服务”主题)。
    • 此代理具有一个网络连接器,可自动连接到所有本地Web实例代理(每个LAN通常只有一个)。
    • 此代理具有一个网络连接器,可自动连接到所有本地根borker实例(通常每个LAN只有一个)。
    • 只有Web服务器才会向此主题发布消息。
    • 服务不会发送彼此发送的消息。
  • Web服务器充当服务的前端。它使用Spring Boot。每个Web服务器都连接到自己的个人代理,并订阅在所有Web服务器之间共享的单个全局主题;如果向该主题发送消息,则所有Web服务器都会收到该消息。
    • 只有服务才会向此主题发布消息。
    • Web服务器不会发送彼此发送的消息。
    • 此代理具有一个网络连接器,可自动连接到所有本地根borker实例(通常每个LAN只有一个)。
  • 根代理是一个美化的Java应用程序,它启动一个ActiveMQ代理。它使用Spring Boot。根代理不发布或订阅;它们只是充当局域网之间的桥梁。
    • 每个根代理将连接到其父代理(不是通过XML完成)。这是用Java代码完成的。
    • 设置:duplex = true,checkDuplicateMessagesOnDuplex = true,suppressDuplicateTopicSubscriptions = false,networkTTL = 10

我在配置所有经纪人时遵循了本指南:http://activemq.apache.org/networks-of-brokers.html

以下是目标架构图:Broker architectural diagram

我们观察到的是,在一定数量的服务联机后,消息在服务和Web应用程序实例之间停止流动,即使它们位于同一LAN上并且彼此直接连接。我们可以看到生成器创建消息(在Web应用程序日志中),但消费者从不接收网络数据(使用Wireshark验证)。我无法判断经纪人是否将消息发送到错误的位置。当我们使用jconsole查看正在运行的实例时,正确的主题会出现在我们的JMX MBEANS中。

任何JVM都没有错误/警告。

我们做过的一个观察是,在不同的发现组中添加新的Web服务器和服务似乎没有问题。它们没有任何通信问题,因此我们认为这是一个代理配置问题。

服务broker.xml:

<!-- Connects to root broker and web broker -->
<networkConnectors>
    <networkConnector name="service-${broker.id}-broker-nc" duplex="true" networkTTL="10"
        checkDuplicateMessagesOnDuplex="true" suppressDuplicateTopicSubscriptions="false"
        uri="multicast://225.5.5.5:6555?group=GROUP_BROKER&amp;maxReconnectAttempts=1&amp;joinNetworkInterface=${broker.netInterface}" />
    <networkConnector name="service-${broker.id}-web-nc" duplex="true" networkTTL="10"
        checkDuplicateMessagesOnDuplex="true" suppressDuplicateTopicSubscriptions="false"
        uri="multicast://225.5.5.5:6555?group=GROUP_WEB&amp;maxReconnectAttempts=1&amp;joinNetworkInterface=${broker.netInterface}" />
</networkConnectors>

<!-- Don't advertise the broker (only connection should be from localhost) -->
<transportConnectors>
    <transportConnector name="openwire"
        uri="tcp://${broker.ip}:${broker.port}?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600" />
</transportConnectors>

网络broker.xml:

<!-- Connect to root broker -->
<networkConnectors>
    <networkConnector name="web-${broker.id}-broker-nc" duplex="true" networkTTL="10"
        checkDuplicateMessagesOnDuplex="true" suppressDuplicateTopicSubscriptions="false"
        uri="multicast://225.5.5.5:6555?group=GROUP_BROKER&amp;maxReconnectAttempts=1" />
</networkConnectors>

<!-- Advertise web broker (service will connect to this) -->
<transportConnectors>
    <transportConnector name="openwire"
        uri="tcp://${broker.ip}:${broker.port}?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"
        discoveryUri="multicast://225.5.5.5:6555?group=GROUP_WEB" />
</transportConnectors>

根broker.xml:

<!-- Advertise root broker (service and web will connect to this) -->
<transportConnectors>
    <transportConnector name="openwire"
        uri="tcp://${broker.ip}:${broker.port}?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"
        discoveryUri="multicast://225.5.5.5:6555?group=GROUP_BROKER" />
</transportConnectors>
  1. 上面显示的配置是否支持上面显示的架构?
  2. 您是否看到任何其他问题/陷阱?

0 个答案:

没有答案