一、消息队列MQ(Message Queue)
参考书籍:《Spring Boot+Vue全栈开发实战》
消息队列( Message Queue )是种进程间或者线程间的异步通信方式,消息生产者在产生消息后,会将消息保存在消息队列中,直到消息消费者来取走它 ,即消息的发送者和接收者不需要同时与消息队列交互,使用消息队列可以有效实现服务的解耦,并提高系统的可靠性以及可扩展性。
1. JMS(Java Message Service)
JMS(Java Message Service)Java消息服务,字面上来看,是仅支持Java平台,消息服务,无非就是对外提供服务,也就是提供API。它通过统一JAVA API层面的标准,使得多个客户端可以通过JMS进行交互,大部分消息中间件提供商都对JMS提供支持,JMS和ActiveMQ的关系就像JDBC和JDBC驱动的关系。JMS包括两种消息模型:点对点和发布者/订阅者。
2.ActiveMQ简介
Apache ActiveMQ是个开源的消息中间件,它不仅完全支持 JMS1.1规范,而且支持多种编程语言,同时还提供了对spring框架的支持,以及集群的支持。
3. ActiveMQ安装
ActiveMQ都是安装在Linux上的,因此,本案例的安装环境为CentOS 7, ActiveMQ版本为15.4.14 ,安装步骤如下(注意,要运行ActiveMQ,CentOS 上必须安装 Java 运行环境)
wget http://mirrors.hust.edu.cn/apache//activemq/5.15.14/apache-activemq-5.15.14-bin.tar.gz
tar -zxvf apache-activemq-5.15.14-bin.tar.gz
cd apache-a
ctivemq-5.15.14
cd bin/
./activemq start
./activemq status
./activemq stop
启动成功后,在浏览器输入http://localhost:8161,8161ActiveMQ 默认端口号,这时候需要进行登录,默认账号密码都是admin,登录成功后如下:
点击"Manage ActiveMQ broker"链接进入管理员控制台,如下:
4. ActiveMQ整合SpringBoot
由于 JMS 是一套标准,因此 Spring Boot 整合 JMS 必然就是整合 JMS 的某一个实现,本案例以ActiveMQ 为例来看 Spring Boot 如何进行整合。
Spring Boot ActiveMQ 置提供了相关的“ Starter ”,因此整合非常容易。首先创建 Spring Boot 项目,添加 ActiveMQ 依赖,pom.xml代码如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
配置文件application.yml如下:
spring:
activemq:
broker-url: tcp://localhost:61616
packages:
trust-all: true
user: admin
password: admin
自定义消息类,如下:
public class Message implements Serializable {
private String content;
private Date date;
}
接下来在项目创建一个Jms组件,如下:
@Component
public class JmsComponent {
@Autowired
JmsMessagingTemplate jmsMessagingTemplate;
public void send(Message msg) {
jmsMessagingTemplate.convertAndSend(new ActiveMQQueue("target"), msg);
}
@JmsListener(destination = "target")
public void receive(Message msg) {
System.out.println("receive:" + msg);
}
}
测试类中调用JmsComponent组件进行消息发送,如下:
@SpringBootTest
class ActivemqApplicationTests {
@Autowired
JmsComponent jmsComponent;
@Test
void contextLoads() {
Message msg = new Message();
msg.setContent("hello activemq...");
msg.setDate(new Date());
jmsComponent.send(msg);
}
}
成功后输出如下:
在控制面板中可以看到发送的消息个数:
|