ActiveMQフォールトトレランスリンクテスト


ActiveMQフォールトトレランスリンクテスト
前回のブログに基づいて、環境は前節のものを利用していますが、構築していなければ、前編を参考にすることができます.
接続されたBrokerがオフになった場合、Clientはこの問題を解決するために2つの戦略をとることができます.
1.クラスタ内の他のノードの接続を試みる
2.直接終了して戻る
では、今回のテストのFailOverは1つ目です.
あまり話さないで、前のブログの環境を直接起動します.次に、コードを入力します.
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が提供するフォールトトレランスリンクのメカニズムであり、クラスタの一部のノードが停止した後も他のノードに接続できることを保証する.