当前位置: 首页 > 知识库问答 >
问题:

Artemis HA和集群不工作

庄萧迟
2023-03-14

下面是Broker.xml中artemis集群(3台服务器)的设置

     <!-- 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>
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();
        }
    }
}

我预计broker3在集群中就应该开始接收请求。

共有1个答案

邢雨华
2023-03-14

我可以从管理UI看到broker1有备份broker2和Broker3。broker2有Broker1的后盾。broker3没有任何备份。

Artemis中的故障转移只在现场和备份之间工作。在您的场景中,broker1正在备份broker2,因此当您关闭broker1时,意味着broker2不再有备份,因此当您关闭broker2时不会发生故障转移。您应该在主配置从配置中指定 ,以便备份以更有组织的方式形成,这样就不会发生这种情况。

 类似资料:
  • 我试图学习Akka集群下面的教程提供了这里 我已经创建了应用程序和回购是在这里。 正如教程中提到的,我已经启动了FrontEndApp 即使我在2551和2552上启动后端应用程序,上述警告消息也会不断重复。 在2551上启动后端参与者的终端日志。 最后一个日志持续重复。 在2552上启动后端参与者的终端日志。 不确定是什么原因群集节点不能检测到彼此和参与者节点与后端。 我会错过任何设置吗?

  • 在src目录下,我运行下面的命令 但得到以下错误。 创建集群[ERR]抱歉,无法连接到节点127.0.0.1:7000 但是,如果我使用命令“redis server redis.conf”在7000处启动节点,其中redis.conf在下面 端口7000群集已启用是群集配置文件nodes.conf群集节点超时10群集从属有效性系数0 appendonly是 同样,我成功地在所有端口启动了redi

  • 我已经在集群中配置了3个kafka,我正在尝试与sping-kafka一起使用。 但是在我杀死kafka领导者后,我无法发送其他消息到队列。 我将Spring.kafka.bootstrap-servers属性设置为:“kafka-1:9092;kafka-2:9093,kafka-3:9094”以及我的主机文件中的所有名称。 Kafka0.10版 有人知道如何正确配置? 编辑 我测试过一个东西,

  • 最近,我在使用logback.xml作为日志记录时,在独立集群模式下的Flink日志记录中遇到了一个问题。我的要求是,我的所有作业都应该登录到特定的文件夹中,我的flink框架日志应该放在单独的文件夹中,而且对于在我的flink集群中运行的每个作业,应该有单独的文件夹用于不同的作业。我在我的本地集群中测试了它,它运行良好,我得到了所有的日志,与我提交的Flink作业相关的单独文件夹,但一旦我在独立

  • 我在WebSphere8.5.5上使用Quartz-2.2.3,在集群环境中,我有2个节点,每个节点上有3个JVM。 我正在应用程序启动时配置作业。 问题是作业在每个节点上配置一次,我希望它在两个节点上只配置一次,而不是每个节点上都配置一次。 我的配置如下: QuartzConfig.Properties: ApplicationContextListener: