SpringBoot整合ActiveMQ,看这篇就够了
activemq是apache提供的一个开源的消息系统,完全采用java来实现,因此它能很好地支持jms(java message service,即java消息服务)规范;本文将详细介绍下activemq的安装、与springboot整合发送队列消息、发送主题消息的的过程。
本文目录
一、linux下activemq安装
1.下载并解压
wget https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz
tar zxvf apache-activemq-5.15.9-bin.tar.gz
2.运行
cd bin/
./activemq start
3.进入管理界面
浏览器访问192.168.0.1:8161/admin/,默认用户名和密码为:admin/admin,控制台截图如下:
列表中信息含义如下:
-
number of pending messages:等待消费的消息 这个是当前未出队列的数量。
-
number of consumers:消费者 这个是消费者端的消费者数量
-
messages enqueued:进入队列的消息 进入队列的总数量,包括出队列的。
-
messages dequeued:出了队列的消息 可以理解为是消费这消费掉的数量。
二、发送队列消息
队列模式特点:
- 客户端包括生产者和消费者。
- 队列中的一个消息只能被一个消费者使用。
- 消费者可以随时取消息。
application.properties配置如下:
#连接地址
spring.activemq.broker-url=tcp://192.168.0.1:61616
#如果是点对点(queue),那么此处默认应该是false,如果发布订阅,那么一定设置为true
spring.jms.pub-sub-domain=false
activemqconfig.java配置:
/**
* 点对点
*/
@bean
public queue queue() {
return new activemqqueue("active.queue");
}
消息生产者sendcontroller.java发送代码如下:
/*
* 发送 队列消息
*/
@requestmapping("/sendqueue")
public string sendqueue() {
string message = uuid.randomuuid().tostring();
// 指定消息发送的目的地及内容
this.jmsmessagingtemplate.convertandsend(this.queue, message);
return "消息发送成功!message=" + message;
}
消息消费者queuecustomercontroller.java发送代码如下:
@restcontroller
public class queuecustomercontroller {
/*
* 监听和接收 队列消息
*/
@jmslistener(destination="active.queue")
public void readactivequeue(string message) {
system.out.println("接受到:" + message);
}
}
浏览器连续访问:http://localhost:8080/sendqueue,消息发送成功,消费者接收消息后打印的日志如下:
接受到:51d85d31-002d-4c9b-87df-a5ea64e8d6da
接受到:1c9dab0c-1d47-4556-95dc-601c8add44fe
接受到:d199ff29-d6ff-41d2-ada0-921d636f7ed1
接受到:4d50ba07-a48a-42b6-a67e-805cdeea662c
接受到:31fc16a9-8aec-4ee6-bbb3-a0ca22c19686
三、发送主题消息
主题模式特点:
- 客户端包括发布者和订阅者。
- 主题中的消息可以被所有订阅者消费。
- 消费者不能消费订阅之前发送的消息。
application.properties中修改属性:
spring.jms.pub-sub-domain=true
activemqconfig.java配置:
/**
* 发布/订阅
*/
@bean
public topic topic() {
return new activemqtopic("active.topic");
}
消息生产者sendcontroller.java发送代码如下:
/*
* 发送 主题消息
*/
@requestmapping("/sendtopic")
public string sendtopic() {
string message = uuid.randomuuid().tostring();
// 指定消息发送的目的地及内容
this.jmsmessagingtemplate.convertandsend(this.topic, message);
return "消息发送成功!message=" + message;
}
添加两个消息消费者,topiccustomercontroller.java代码如下:
/*
* 监听和接收 主题消息1
*/
@jmslistener(destination = "active.topic")
public void readactivetopic1(string message) {
system.out.println("customer1接受到:" + message);
}
/*
* 监听和接收 主题消息2
*/
@jmslistener(destination = "active.topic")
public void readactivetopic2(string message) {
system.out.println("customer2接受到:" + message);
}
浏览器连续访问:http://localhost:8080/sendtopic,消息发送成功,两个消费者接收消息后打印的日志如下:
customer1接受到:96c674b7-a310-487b-8088-2c5d049cfabf
customer2接受到:96c674b7-a310-487b-8088-2c5d049cfabf
customer1接受到:fee4fde8-6cbe-4d08-b179-e9462f6f1e74
customer2接受到:fee4fde8-6cbe-4d08-b179-e9462f6f1e74
customer1接受到:05d79335-ff33-41ec-ba13-a6f5c9d5bba0
customer2接受到:05d79335-ff33-41ec-ba13-a6f5c9d5bba0
customer1接受到:f8244df3-5504-478b-b86e-77823ab34dac
customer2接受到:f8244df3-5504-478b-b86e-77823ab34dac
推荐阅读
1.编码神器lombok,学会后开发效率至少提高一倍!
2.spring boot配置过滤器的两种方式
3.spring boot统一异常处理实战
4.从技术的角度分析下为什么不要在网上发“原图”
5.spring boot之profile--快速搞定多环境使用与切换
java碎碎念公众号限时领取免费java相关资料,涵盖了java、redis、mongodb、mysql、zookeeper、spring cloud、dubbo/kafka、hadoop、hbase、flink等高并发分布式、大数据、机器学习等技术。
关注下方公众号即可免费领取:
上一篇: Unihertz Titan上架众筹:4.5寸方形屏幕 硬核全键盘设计
下一篇: 项目的开始