基于JMS的ActiveMQ整合SpringBoot

目录

  • 一、消息队列MQ(Message Queue)
    • 1. JMS(Java Message Service)
    • 2.ActiveMQ简介
    • 3. ActiveMQ安装
    • 4. ActiveMQ整合SpringBoot

一、消息队列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 运行环境)

# 1.下载ActiveMQ
wget http://mirrors.hust.edu.cn/apache//activemq/5.15.14/apache-activemq-5.15.14-bin.tar.gz

# 2.解压下载文件
tar -zxvf apache-activemq-5.15.14-bin.tar.gz

# 3.启动ActiveMQ
cd apache-a
ctivemq-5.15.14
cd bin/
./activemq start

# 查看ActiveMQ的状态
./activemq status
# 停止ActiveMQ
./activemq stop

启动成功后,在浏览器输入http://localhost:8161,8161ActiveMQ 默认端口号,这时候需要进行登录,默认账号密码都是admin,登录成功后如下:

基于JMS的ActiveMQ整合SpringBoot_第1张图片

点击"Manage ActiveMQ broker"链接进入管理员控制台,如下:

基于JMS的ActiveMQ整合SpringBoot_第2张图片

4. ActiveMQ整合SpringBoot

由于 JMS 是一套标准,因此 Spring Boot 整合 JMS 必然就是整合 JMS 的某一个实现,本案例以ActiveMQ 为例来看 Spring Boot 如何进行整合。

Spring Boot ActiveMQ 置提供了相关的“ Starter ”,因此整合非常容易。首先创建 Spring Boot 项目,添加 ActiveMQ 依赖,pom.xml代码如下:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-activemqartifactId>
dependency>

配置文件application.yml如下:

spring:
  activemq:
    # 配置broker地址,默认端口为61616
    broker-url: tcp://localhost:61616
    packages:
      # 支持发送对象消息
      trust-all: true
    # ActiveMQ的账号和密码
    user: admin
    password: admin

自定义消息类,如下:

public class Message implements Serializable {

    private String content;
    private Date date;
 	
    // 省略get set toString...
}

接下来在项目创建一个Jms组件,如下:

@Component
public class JmsComponent {

    // spring提供的消息发送模板
    @Autowired
    JmsMessagingTemplate jmsMessagingTemplate;

    /**
     * 消息发送,目标为"target"的消费者将接收到该消息
     * @param msg
     */
    public void send(Message msg) {
        jmsMessagingTemplate.convertAndSend(new ActiveMQQueue("target"), msg);
    }

    /**
     * 消息消费者订阅的目标为"target"
     * @param 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);
    }

}

成功后输出如下:

在控制面板中可以看到发送的消息个数:

基于JMS的ActiveMQ整合SpringBoot_第3张图片

你可能感兴趣的:(中间件,中间件)