ActiveMQ容錯鏈接測試

ActiveMQ容錯鏈接測試

基於上一篇博客,環境利用的是上一節的,如果沒有搭建的話,可以參考上一篇

如果連接的Broker掛掉了,那麼Client可以採取兩種策略來解決遇到的這個問題。

1.嘗試連接集羣中的其他節點

2.直接退出返回

那麼此次測試的FailOver就是屬於第一種。

話不多說,直接啓動上一篇博文的環境。然後上代碼:

package com.burgess.net;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 容錯鏈接測試代碼
 * 創建人    BurgessLee
 * 創建時間   2020/5/30
 * 描述
 */
public class FailOverTest {

    public static void main(String[] args) throws JMSException {
        // randomize=true默認是隨機分發的,如果指定爲false,優先向指定的服務器發送消息
        String url01="failover:(tcp://192.168.31.150:61616,tcp://192.168.31.150:61617)?randomize=true";
        ActiveMQConnectionFactory connFactory = new ActiveMQConnectionFactory(url01);
        Connection conn =connFactory.createConnection();
        conn.start();
        Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        try {
            Queue queue = session.createQueue("fail-over-queue");
            MessageProducer producer = session.createProducer(queue);
            for (int i = 0; i < 30; i++) {
                TextMessage message = session.createTextMessage("message--" + i);
                producer.send(message);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            session.commit();
            session.close();
            conn.close();
        }
    }

}

通過測試發現:

  • 如果指定爲true

  • 如果兩個節點都存在,會隨意往任意一個節點發送消息

  • 如果兩個節點有一個掛掉了,那麼會往另外一個裏面發送消息

  • 如果指定爲false,優先向指定的服務器發送消息

消費者代碼:

package com.burgess.net;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 容錯測試消費端
 * 創建人    BurgessLee
 * 創建時間   2020/5/30
 * 描述
 */
public class FailOverConsumerTest {


    public static void main(String[] args) throws JMSException {
        // randomize=true默認是隨機分發的,如果指定爲false,優先向指定的服務器發送消息
        String url01="failover:(tcp://192.168.31.150:61616,tcp://192.168.31.150:61617)?randomize=true";
        ActiveMQConnectionFactory connFactory = new ActiveMQConnectionFactory(url01);
        Connection conn = connFactory.createConnection();
        conn.start();
        Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        try {
            Queue queue = session.createQueue("fail-over-queue");
            MessageConsumer consumer = session.createConsumer(queue);
            for (int i = 0; i < 30; i++) {
                Message message = consumer.receive();
                String jmsType = message.getJMSType();
                System.out.println("消息類型:"+jmsType);
                TextMessage tx=(TextMessage)message;
                session.commit();
                System.out.println("收到消息:"+tx.getText());
                //每個接收一次消息睡眠1秒
                Thread.sleep(1000);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            session.close();
            conn.close();
        }
    }

}

測試效果與生產者相同。

總結:鏈接方式使用failover鏈接集羣,是ActiveMQ提供的容錯鏈接的一種機制,保證當集羣中有些節點掛掉之後,仍舊可以連接到其他節點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章