SpringBoot 整合 JMS

JMS 简介

JMS( Java Message Service )即 Java 消息服务,它通过统一 JAVA API 层面的标准,使得多个客户端可以通过 JMS 进行交互,大部分消息中间件提供商都对 JMS 提供支持。 JMS 和 ActiveMQ 的关系就象 JDBC 和 JDBC 驱动的关系。 JMS 包括两种消息模型:点对点和发布者/订阅者,同时 JMS 仅支持 Java 平台。

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

ActiveMQ 简介

Apache ActiveMQ 是一个开源的消息中间件,它不仅完全支持 JMS1.1规范,而且支持多种编程语言,例如 C、C++、C#、Delphi、Erlang、Adobe Flash、Haskell、 Java、 JavaScript、Perl、PHP、Pike、Python 和 Ruby 等,也支持多种协议,例如 OpenWire、REST、STOMP、WS-Notification、MQTT、XMPP 以及 AMQP。Apache ActiveMQ 也提供了对 Spring 框架的支持,可以非常容易地嵌入 Spring 中,同时它也提供了集群支持。

Spring Boot 整合 JMS

步骤如下:

  1. 添加依赖
<!-- ActiveMQ -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
  1. application.properties 中进行连接配置
# ActiveMQ
spring.activemq.broker-url=tcp://192.168.237.128:61616
# 配置信任所有的包,这个配置是为了支持发送对象消息
spring.activemq.packages.trust-all=true
spring.activemq.user=admin
spring.activemq.password=admin
  1. 在项目配置类中提供一个消息队列 Bean,该 Bean 的实例就由 ActiveMQ 提供
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import javax.jms.Queue;

@SpringBootApplication
public class BootApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootApplication.class, args);
    }

    @Bean
    Queue queue() {
        return new ActiveMQQueue("amq");
    }
}
  1. 创建消息实体
import java.io.Serializable;
import java.util.Date;

public class Message implements Serializable {
    private String content;
    private Date date;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "Message{" +
                "content='" + content + '\'' +
                ", date=" + date +
                '}';
    }
}
  1. 创建一个 JMS 组件来完成消息的发送和接收
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import xyz.ther.boot.pojo.Message;

import javax.jms.Queue;

@Component
public class JmsComponent {

    @Autowired
    JmsMessagingTemplate messagingTemplate;

    @Autowired
    Queue queue;

    public void send(Message message) {
        messagingTemplate.convertAndSend(this.queue, message);
    }

    @JmsListener(destination = "amq")
    public void receive(Message message) {
        System.out.println("receive:" + message);
    }
}

JmsMessagingTemplate 是由 Spring 提供的一个 JMS 消息发送模板,可以用来方便地进行消息的发送, 消息发送方法 convertAndSend 的第一个参数是消息队列, 第二个参数是消息内容,例中演示一个对象消息。@JmsListener 注解则表示相应的方法是一个消息消费者,消息消费者订阅的消息 destinationamq

  1. 消息发送测试
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import xyz.ther.boot.jms.JmsComponent;
import xyz.ther.boot.pojo.Message;
import xyz.ther.boot.service.UserService;

import java.util.Date;

@RunWith(SpringRunner.class)
@SpringBootTest
class BootApplicationTests {

    @Autowired
    JmsComponent jmsComponent;

    @Test
    void contextLoads() {
        Message message = new Message();
        message.setContent("Hello JMS!");
        message.setDate(new Date());
        jmsComponent.send(message);
    }
}

测试输出:

receive:Message{content='Hello JMS!', date=Fri Feb 14 18:08:43 CST 2020}
发布了17 篇原创文章 · 获赞 19 · 访问量 363

猜你喜欢

转载自blog.csdn.net/siriusol/article/details/104316878
今日推荐