spring boot(学习笔记第十七课)
- Spring boot的Apache ActiveMQ
学习内容:
- Spring boot的Apache ActiveMQ
1. Spring boot的Apache ActiveMQ
-
什么是
JMS(Java Message Service)
JMS(Java Message Service)
就是Java
消息服务,它统一了Java
的API
标准,多个客户端都可以通过JMS(Java Message Service)
进行连接交互,JMS(Java Message Service)
提供两种模式:
* 点对点模式
* 发布者/订阅者模式
-
安装
Apache ActiveMQ
Apache ActiveMQ
是AMS服务的一个实现,这里尝试使用点对点
模式。- 这里使用
centos
下进行安装,首先保证Java
。
如果[root@master bin]# java -version openjdk version "1.8.0_412" OpenJDK Runtime Environment (build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
centos
上没有Java
,事前安装。
设置yum install java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
JAVA_HOME
vim ~/.bashrc export PATH=$PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
- 继续下载
Apache ActiveMQ
。
这里Java
的版本是Java 8
,所以最高的支持版本就是5.16.3
。
Apache ActiveMQ 5.16.3 - 使用
root
账号进行解压缩,以及安装。
例如,使用/root/activemq
进行安装。tar zxvf /root/activemq/apache-activemq-5.16.3-bin.tar.gz
- 修改
conf/jetty.xml
这里如果不修改,windows
将不会连接上ActiveMQ
。vim /root/activemq/apache-activemq-5.16.3/conf/jetty.xml
jetty.xml
为如下位置需要修改。这里127.0.0.1
修改为0.0.0.0
。<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"> <!-- the default port number for the web console --> <property name="host" value="0.0.0.0"/> <property name="port" value="8161"/> </bean>
- 启动
ActiveMQ
cd /root/activemq/apache-activemq-5.16.3/bin ./activemq start
- 检查
ActiveMQ
的默认端口8161
监听状况
发现有进程在监听,说明启动正常。netstat -tuln |grep 8161
- 在
windows
进行测试。
使用http://IP地址:8161
进行连接,默认的用户名和密码都是admin
。
-
配置
Spring boot
的web
应用进行消息的发送。- 增加
ActiveMQ
的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency>
- 配置指向
ActiveMQ server
的连接
注意spring.activemq.broker-url=tcp://192.168.12.132:61616 spring.activemq.user=admin spring.activemq.password=admin spring.activemq.packages.trusted=com.example.demo.entity,java.util
spring.activemq.packages.trusted
这里特别重要,需要指定传递的可信任自定义Message class
所在的package
。
其他的设定都是连接ActiveMQ
的连接信息。 - 创建
ActiveMQQueue
public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean Queue queue(){ return new ActiveMQQueue("amq"); } }
- 增加
-
配置
Spring boot
的web
应用进行消息的监听。@Component public class JmsComponent { @Autowired JmsMessagingTemplate jmsMessagingTemplate; @Autowired Queue queue; @JmsListener(destination = "amq") public void receive(Message message){ System.out.println("receiving:" + message); } }
-
配置
Message
类。@Data public class Message implements Serializable { private String name; private String content; private Date date; }
注意:
- 这里必须实现
Serializable
接口 - application.properties里面,必须设定信任的
message
类所在的package
,spring.activemq.packages.trusted=com.example.demo.entity,java.util - 这里,指定了
com.example.demo.entity
的基础上,还需要指定内部成员变量类型java.util.date
。
至此位置,接收端(consumer)可以接收到
queue(amq)
发送过来的message
。 - 这里必须实现
-
配置发送端
@Controller public class ActiveMQController { @Autowired JmsMessagingTemplate jmsMessagingTemplate; @Autowired Queue queue; @GetMapping("/sendJms") @ResponseBody public String sendJmsMessage(){ Message message = new Message(); message.setContent("hello,ativemq"); message.setDate(new Date()); message.setName("greet"); jmsMessagingTemplate.convertAndSend(queue,message); return "OK"; } }
-
启动发送端(producer)
使用intellJ
启动web server
作为producer
进行消息发送。使用端口8080
。 -
启动接收端(consumer)
- 将应用程序进行
mvn package
,进行打包jar
包。
正常的情况下发送端应用程序和接收端应用程序应该是两个spring boot
的应用程序,这里为了方便,写在一起,但是启动的时候分别是8080
端口(发送端)和9090
端口(接收端)
使用git bash
的java
命令,启动web server
作为producer
进行消息发送。使用端口9090
。
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=9090
- 将应用程序进行
-
利用
get
请求进行发送message
-
查看接收端控制台,对
message
接收情况进行检查