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提供的容错链接的一种机制,保证当集群中有些节点挂掉之后,仍旧可以连接到其他节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值