消息中间件ActiveMQ学习笔记(二) [Java编码MQ,消费者生产者基本模型]

近期计划学习一下消息队列;
找到的学习视频地址:尚硅谷ActiveMQ教程快速入门



1.Java编码MQ,模拟基础生产者消费者


在这里插入图片描述

  • 创建一个Connection Factory连接工厂;
  • 然后通过连接工厂创建connection连接;
  • 启动该链接后,可通过连接出session 会话;
  • 创建destination目的地[可理解为队列/一种topic主题];
  • 创建出生产者producer / message消息,然后设置destination目的地;
  • 创建出消费者consumer,或者注册一个消息监听器message listener;
  • 生产者可以发送资源,消费者接收消息;
  • 最终完成操作后,可以关闭连接.


首先创建一个简单的maven项目;
在pom.xml文件中使用下面的依赖;

<dependencies>
     <!-- activemq使用的jar包-->
     <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>activemq-all</artifactId>
         <version>5.16.4</version>
     </dependency>
     <!-- activemq和 spring整合-->
     <dependency>
         <groupId>org.apache.xbean</groupId>
         <artifactId>xbean-spring</artifactId>
         <version>3.16</version>
     </dependency>
     <!--日志-->
     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.25</version>
     </dependency>
     <dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-classic</artifactId>
         <version>1.2.3</version>
     </dependency>
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.22</version>
     </dependency>
     <!--测试-->
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         <scope>test</scope>
     </dependency>
</dependencies>

实际操作;

自定义消息生产者


就从这个MQ工厂类ActiveMQConnectionFactory来看;

无参构造中提示需要使用这样一个常量;DEFAULT_BROKER_URL

public static final String DEFAULT_BROKER_URL = "failover://"+DEFAULT_BROKER_BIND_URL;

自定义写一个MQ的生产者;

package com.xiaozhi.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @BelongsProject: activemqstudyday1
 * @BelongsPackage: com.xiaozhi.activemq
 * @Author: 信计1801 李智青
 * @Date: 2022/4/7 16:02
 * @Description: 自定义生产者
 */
public class MyProduce {
   
   
    //链接url
    private static final String ACTIVEMQ_URL = "tcp://192.168.59.128:61616";
    //目标队列名称;
    private static final String QUEUE_NAME = "myDeque";

    public static void main(String[] args) throws JMSException {
   
   
        //1.按照自己的链接,创建连接的工厂;
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);

        //2.通过工厂创建链接;-->开启;
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        //3.创建会话; 参数:  事务, 签收机制;
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4.创建目的地;例如:队列
        Destination destination = session.createQueue(QUEUE_NAME);
        //5.创建消息生产者;
        MessageProducer producer = session.createProducer(destination);
        //生产6条消息存入到MQ中间件的队列中;
        for (int i = 0; i <= 5; i++) {
   
   
            //表名是第几条消息;
            TextMessage textMessage = session.createTextMessage("this is the" + i + "message");
            producer.send(textMessage);
        }
        //关闭资源;
        producer.close();
        session.close();
        connection.close();

        System.out.println("+-+-+-+-+-+-+-+-+-+我把消息都发给中间大佬MQ了");
    }
}

编码完成后, 打开我linux上的ActiveMQ,启动;
本地访问http://192.168.59.128:8161/admin/queues.jsp;注意此时还没有消息;
在这里插入图片描述
现在运行自定义的生产者代码;

麻了,一开始运行老报错,连接超时;
然后去linux 在防火墙设置开放端口61616

firewall-cmd --zone=public --add-port=61616/tcp --permanent

然后重启防火墙

 firewall-cmd --reload

运行Java代码;
在这里插入图片描述
再次刷新访问页面,可看到消息已发布出去了;
在这里插入图片描述
其中的几个参数:
Number Of Pending Messages:等待消费的消息,即未出队列的数量 =总接收数-总出队列数。
Number Of Consumers:消费者数量

Messages Enqueued进队列的总消息量,包括出队列的.
Messages Dequeued:出队消息数,即消费者使用的数量


自定义同步阻塞式的消息消费者


package com.xiaozhi.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @BelongsProject: activemqstudyday1
 * @BelongsPackage: com.xiaozhi.activemq
 * @Author: 信计1801 李智青
 * @Date: 2022/4/7 18:14
 * @Description: 自定义消费者
 */
public class MyConsumer {
   
   
    //链接url
    public static final String ACTIVEMQ_URL = "tcp://192.168.59.128:61616";
    //目标队列名称;
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小智RE0-走在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值