【问题标题】:ActiveMQ Artemis - clustered brokersActiveMQ Artemis - 集群代理
【发布时间】:2021-02-08 23:37:16
【问题描述】:

我想创建两个相互同步的代理,它们的生产者、消费者将看到彼此。

服务器1的broker.xml

    <connectors>
        <!-- Connector used to be announced through cluster connections and notifications -->
        <connector name="artemis">tcp://localhost:61616</connector>
        <!-- connector to the server2 -->
         <connector name="server2-connector">tcp://localhost:61617</connector>
    </connectors>

    <cluster-user>admin</cluster-user>

    <cluster-password>admin</cluster-password>

    <!-- Clustering configuration -->
    <cluster-connections>
       <cluster-connection name="my-cluster">
          <connector-ref>artemis</connector-ref>
          <retry-interval>500</retry-interval>
          <use-duplicate-detection>true</use-duplicate-detection>
          <message-load-balancing>STRICT</message-load-balancing>
          <max-hops>1</max-hops>
          <static-connectors>
             <connector-ref>server2-connector</connector-ref>
          </static-connectors>
       </cluster-connection>
    </cluster-connections>

服务器2的broker.xml

    <connectors>
        <!-- Connector used to be announced through cluster connections and notifications -->
        <connector name="artemis">tcp://localhost:61617</connector>
        <!-- connector to the server1 -->
         <connector name="server1-connector">tcp://localhost:61616</connector>
    </connectors>

    <cluster-user>admin</cluster-user>

    <cluster-password>admin</cluster-password>

    <!-- Clustering configuration -->
    <cluster-connections>
       <cluster-connection name="my-cluster">
          <connector-ref>artemis</connector-ref>
          <retry-interval>500</retry-interval>
          <use-duplicate-detection>true</use-duplicate-detection>
          <message-load-balancing>STRICT</message-load-balancing>
          <max-hops>1</max-hops>
          <static-connectors>
             <connector-ref>server1-connector</connector-ref>
          </static-connectors>
       </cluster-connection>
    </cluster-connections>

从 server1 的 Web 控制台创建的消息在 server2 的 Web 控制台中不可见。 这个配置有什么问题?

Web 控制台中的状态:

Cluster Info
Lives: 2
Backups: 0
HA Policy: Live Only

【问题讨论】:

    标签: activemq-artemis


    【解决方案1】:

    引用the official documentation:

    请注意,Apache ActiveMQ Artemis 不会将消息转发给其他 如果其他节点上没有同名队列,则节点,即使 如果此参数设置为 STRICT。

    另请注意,集群和高可用性 (HA) 是不同的概念。

    【讨论】:

      【解决方案2】:

      集群中的实时代理并不完全“同步”彼此。您似乎期望集群中每个实时代理的控制台将报告与集群中所有其他实时代理相同的消息统计信息。但是,它不是这样工作的。

      集群中的每个实时代理都“拥有”某些消息,并且每个代理都有一组独立的队列。因此,每个代理的 Web 控制台将显示该特定代理的唯一统计信息。需要明确的是,消息可以从一个代理移动到另一个代理,因此连接到集群中一个实时代理的消费者可能会消费发送到集群中不同实时代理的消息,但消息只是被移动了不得以任何方式复制或转载。

      我建议您查看cluster documentation,因为它提供了有关所有这些工作原理的更多详细信息。

      如果您想将一个代理与另一个代理“同步”,以便在代理失败时另一个代理将接管并拥有所有相同的消息数据,那么您应该使用一对实时/备份代理配置高可用性。有关详细信息,请参阅HA documentation

      【讨论】:

      • 我想运行几个activemq实例,这样在一个实例失败的情况下,另一个实例可以正常工作,所以据我了解,这是一个很好的解决方案,对吧?跨度>
      • 集群和高可用性 (HA) 是不同的概念。看HA configuration
      • 我更新了我的答案以解决您的评论。希望有帮助!
      猜你喜欢
      • 2018-05-08
      • 2020-10-20
      • 2021-02-15
      • 2021-01-23
      • 2020-02-24
      • 2021-10-13
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多