MQ 安装

本文介绍了Apache ActiveMQ的安装过程,包括在CentOS7上下载安装,启动及配置防火墙。接着阐述了ActiveMQ基于JMS的工作原理,点对点和发布/订阅两种消息模型。还讲解了SpringBoot整合ActiveMQ的方法,传输协议的选择,以及高可用性设置,如持久化到MySQL和利用高速缓存。最后讨论了ActiveMQ的高可用集群实现和面试相关问题,如消息丢失和重复消费的解决方案。
摘要由CSDN通过智能技术生成

一、下载安装:

操作系统:centos7

  1. wget http://archive.apache.org/dist/activemq/5.15.10/apache-activemq-5.15.10-bin.tar.gz
  2. tar -zxvf apache-activemq-5.15.10-bin.tar.gz
  3. ./activemq start > ../mylog.log  启动mq,并将日志记录进指定文件
  4. 防火墙开放 8161(默认访问端口,提供页面控制台服务)和 61616(默认进程端口,提供JMS服务)
  5. http://ip:8161/admin 进行访问,初始账号密码:admin/admin

二、使用

1、pom.xml文件引入activemq的jar包
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.15.10</version>
</dependency>
<dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring</artifactId>
    <version>3.16</version>
</dependency>

三、原理

底层是JMS,java消息服务,J2EE中的一个重要规范,定义了两个应用程序之间异步通信的API接口,使我们的程序可以到达异步、解耦、削峰的效果。

  • JMS简介

消息模型分为2种:

  1. 点对点模式Point-to-Point(P2P),队列queue
  2. 发布/订阅模式Publish/Subscribe(Pub/Sub),topic主题

点对点模式Point-to-Point(P2P),队列queue

一条消息仅能对应一个消费者,多个消费者一个生产者的情况,每个消费者轮询获取消息;

消息被消费后,队列中不会再有该条消息;

消费者和生产者的启动顺序可以随意;

如果没有消费者,消息也不会被丢弃;

 

示例

创建一个点对点的生产者

        String brokerUrl = "tcp://localhost:61616";
        String queueName = "第一个消息队列";
        // 1、创建连接工厂
        ActiveMQConnectionFactory connectionFactory = new                 ActiveMQConnectionFactory(brokerUrl);
        // 2、创建连接
        Connection connection = connectionFactory.createConnection();
        connection.start();
        // 3、创建会话session  第一个参数:是否开启事务;第二个参数:应答模式
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、创建目的地
        Queue queue = session.createQueue(queueName);
        // 5、创建消息生产者
        MessageProducer producer = session.createProducer(queue);
        // 6、创建3条消息
        for (int i = 1; i <= 3; i++) {
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("第"+i+"条消息");
            // 7、生产者发送消息
            producer.send(textMessage);
        }
        // 8、关闭资源
        producer.close();
        session.close();
        connection.close();

点对对消费者

public static void main(String[] args) throws JMSException, IOException {
        String brokerUrl = "tcp://localhost:61616";
        String queueName = "第一个消息队列";
        // 1、创建连接工厂
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl);
        // 2、创建连接
        Connection connection = connectionFactory.createConnection();
        connection.start();
        // 3、创建会话session  第一个参数:是否开启事务;第二个参数:应答模式
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、创建目的地
        Queue queue = session.createQueue(queueName);
        // 5、创建消息消费者
        MessageConsumer consumer = session.createConsumer(queue);
        // 设置异步非阻塞消息监听器获取消息
        consumer.setMessageListener((message)->{
            TextMessage message1 = (TextMessage) message;
            try {
                System.out.println("我是消费者1:"+message1.getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        });
        // 阻塞,防止未获取消息就结束了
        System.in.read();
        // 8、关闭资源
        consumer.close();
        session.close();
        connection.close();
    }

发布/订阅模式Publish/Subscribe(Pub/Sub),topic主题

一条消息可以对应多个消费者;

消费者只能接收订阅以后的消息,订阅前的消息获取不到,所以要先启动消费者再启动生产者;

如果没有消费者,消息会被丢弃;

示例

创建 发布/订阅 模式的生产者

public static void main(String[] args) throws Exception{
        String brokerUrl = "tcp:/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值