开发者学堂课程【SpringBoot 实战教程: SpringBoot 整合 ActiveMQ】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10816
SpringBoot 整合 ActiveMQ
1、ActiveMQ 是符合 gms 规范的一个消息管理者。
2、以下是 springboot 提供的架包依赖,放入工程中。创建好工程,做好 web 依赖。
<!--整合 ActiveMQ 的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
3、在 liunx 中安装好 ActiveMQ,进行启动。192.168.25.129是服务器地址,输入root@ubuntu: , opt , apache activemq-5.12.0/bin# . /activemq status
,可以看到 activeMQ is running (pid' 1915 ‘
)
,想使用 activeMQ,需要配置 activeMQ 的 IP 地址,要知道它的 IP 地址,需要在全局配置文件中进行配置,application.properties。
输入以下代码:
spring.activemq.broker-url=tcp://192.168.25.129:61616
连接 activeMQ 的 IP 地址,端口号是61616,192.168.25.129是 linux 的 IP 地址
spring.activemq.in-memory=true
内存
spring.activemq.user=admin
访问 activemq 后台系统的用户名
spring.activemq.password=admin
访问 activemq 后台系统的密码
#如果此处设置为 true,需要加如下面的依赖包,否则会自动配置失败,JmsMessagingTemplate
spring.activemq.pool.enabled=false
指的是 activemq 的连接池,如果设置为false,不使用连接池,就不需要做依赖
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
4、把代码加到配置文件中后,如何实现消息的发送和消息的接收?以点对点为例,首先创建消息的发送者,Producer。
如何实现消息发送?
@Component
创建对象加注解
Public class Producer{
@Autowired
直接注入
private JmsMessagingTemplate jmsTemplate;
消息发送的模版
//发送消息的功能
public void sendMessage (destination
des
,
string
message)
{
需要有消息发送的目的地,在 gms 中的接口规范是 destination,目的地可能是变化,所以定义为单数,消息的内容也是变化的,所以都作为单数
jmsTemplate . convertAndSend (des, message )选择合适的参数,发送目的地的参数,使用 jmsTemplate 实现了消息的发送
5、写一个消费者,也就是消息的接受者 Consumer
创建对象,接收消息有一个特点,它需要时刻监听着是否有消息。
@Component
public class Consumer
{
@JmsListener (
destination=
‘’
‘’
)
时刻监听是否有消息,有很多消息队列,所以需要指明哪个队列中,指明消息接收的目的地
public void receiveMsg (String text )
如何接收到信息,发送是字符串类型,定义字符串参数,这样发送的消息就传给text
。
{
System. out. println (text+’’.......’’);
输出消息
}
6、写一个 controller,实现消息的发送,testcontroller。
使用 producer 调用 sendmessage 实现消息的发送,所以需要注入 producer。发送消息需要指明目的地,消息发送的目的地创建好后,让 producer 调用 sendmessage 方法,进行发送。
package com. qianfeng. controller;
import org . springframework. beans. factory . annotation . Autowired;
import org . springframework. stereotype . Controller;
import com. qianfeng . activemq. Producer ;
@Controller
public class TestController
{
@Autowired
Private
Producer producer;
@RequestMapping ("/activemq")
@ResponseBody
public String
tests ()
//点对点消息,发的消息只能被一个进行接收
Destination des
=
new
ActiveMQQueue (
‘’myqueues
‘’
)
;
给消息队列取个名字
producer . sendMessage (des, "hello");
}
Return’’ok’’;
}
7、消息的发送者,接受者以及 controller 都需要被扫描,在启动类中扫描包。
@SpringBootApplication(scanBasePackages="com. qianfeng")
8、在发消息时,ActiveMQ 的名字是 myqueues,接收消息需要从 myqueues 里进行接收,接收方要时刻监听着是否有消息,监听的是 myqueues 队列,名字指明一下,目的地。
@JmsListener (destination= "myqueues")
public void
receiveMsg (String text)
{
System. out. println (text+"......") ;
}
9、进行启动,启动成功,controller 的访问路径是 activemq,输入localhost:8080/activemq
,可以看到 ok。
查看控制台,可以看到它有收到三次消息。发送了三次消息,三次消息都是 hello。这就是在 springboot 中整合 activemq 的方式。