阿尔忒弥斯 HA 和集群不起作用



以下是代理中Artemis集群(3台服务器(的设置.xml

<!-- Clustering configuration -->
<broadcast-groups>
<broadcast-group name="my-broadcast-group">
<broadcast-period>5000</broadcast-period>
<jgroups-file>test-jgroups-file_ping.xml</jgroups-file>
<jgroups-channel>active_broadcast_channel</jgroups-channel>
<connector-ref>netty-connector</connector-ref>
</broadcast-group>
</broadcast-groups>
<discovery-groups>
<discovery-group name="my-discovery-group">
<jgroups-file>test-jgroups-file_ping.xml</jgroups-file>
<jgroups-channel>active_broadcast_channel</jgroups-channel>
<refresh-timeout>10000</refresh-timeout>
</discovery-group>
</discovery-groups>
<cluster-connections>
<cluster-connection name="my-cluster">
<connector-ref>netty-connector</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>
<discovery-group-ref discovery-group-name="my-discovery-group"/>
</cluster-connection>
</cluster-connections>
<ha-policy>
<shared-store>
<colocated>
<backup-port-offset>100</backup-port-offset>
<backup-request-retries>-1</backup-request-retries>
<backup-request-retry-interval>2000</backup-request-retry-interval>
<max-backups>2</max-backups>
<request-backup>true</request-backup>
<master>
<failover-on-shutdown>true</failover-on-shutdown>
</master>
<slave>
<scale-down/>
</slave>
</colocated>
</shared-store>
</ha-policy>

群集和 ha 配置在所有服务器中都相同。我试图理解和执行的故障转移方案如下所示。

  1. 按提到的顺序启动代理 1,代理 2,代理 3。在这里我可以 从管理 UI 中查看代理 1 具有备份代理 2 和代理 3。 代理 2 有代理 1 的支持。代理 3 没有任何备份。
  2. 我在下面写了连接到服务器的程序

    public static void main(final String[] args) throws Exception {
    Connection connection = null;
    InitialContext initialContext = null;
    try {
    Properties properties = new Properties();
    properties.put(Context.INITIAL_CONTEXT_FACTORY,
    "org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory");
    properties.put("connectionFactory.ConnectionFactory",
    "(tcp://localhost:61616,tcp://localhost:61617,tcp://localhost:61618)?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=-1");
    properties.put("queue.queue/exampleQueue", "exampleQueue");
    // Step 1. Create an initial context to perform the JNDI lookup.
    initialContext = new InitialContext(properties);
    ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("ConnectionFactory");
    // Step 2. Look-up the JMS Queue object from JNDI
    Queue queue = (Queue) initialContext.lookup("queue/exampleQueue");
    // Step 3. Create a JMS Connection
    connection = cf.createConnection("admin", "admin");
    // Step 4. Start the connection
    connection.start();
    // Step 5. Create a JMS session with AUTO_ACKNOWLEDGE mode
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    // Step 8. Create a text message
    BytesMessage message = session.createBytesMessage();
    message.setStringProperty(InfoSearchEngine.QUERY_ID_HEADER_PARAM, "123");
    MessageConsumer consumer0 = session.createConsumer(queue);
    // Step 9. Send the text message to the queue
    while (true) {
    try {
    Thread.sleep(500);
    // Step 7. Create a JMS message producer
    MessageProducer messageProducer = session.createProducer(queue);
    messageProducer.send(message);
    System.out.println("Sent message: " + message.getBodyLength());
    } catch (Exception e) {
    System.out.println("Exception - " + e.getLocalizedMessage());
    }
    }
    } finally {
    if (connection != null) {
    // Step 20. Be sure to close our JMS resources!
    connection.close();
    }
    if (initialContext != null) {
    // Step 21. Also close the initialContext!
    initialContext.close();
    }
    }
    }
    
  3. 如果我关闭代理 1,程序将转移到代理 2 并运行良好。如果 我关闭了代理 2,然后程序无法连接到代理 3。

我预计 broker3 应该已经开始处理请求,因为它在集群中。

我可以从管理员 UI 中看到代理 1 备份了代理 2 和代理 3。 代理

2 具有代理 1 的支持。 代理 3 没有任何备份。

Artemis中的故障转移仅在实时和备份之间工作。 在您的场景中,代理 1 正在备份代理 2,因此当您关闭代理 1 时,这意味着代理 2 不再具有备份,因此当您关闭代理 2 时,不会发生故障转移。 应在masterslave配置中指定<group-name>,以便以更有条理的方式形成备份,以免发生此类情况。

相关内容

  • 没有找到相关文章

最新更新