近期计划学习一下消息队列;
找到的学习视频地址:尚硅谷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";
//目标队列名称;

722

被折叠的 条评论
为什么被折叠?



