我们使用jms一般是使用spring-jms和activemq相结合,通过spring Boot为我们配置好的JmsTemplate发送消息到指定的目的地Destination。本文以点到点消息模式为例,演示如何在Spring Boot中整合 JMS 和 Active MQ ,实现 MQ 消息的生产与消费。
     点到点消息模式定义:当消息发送者发送消息,消息代理获得消息后,把消息放入一个队列里,当有消息接收者来接收消息的时候,消息将从队列里取出并且传递给接收者,这时候队列里就没有此消息了。队列Queue的存在使得消息的异步传输成为可能。

1 安装ActiveMQ

      关于具体的安装步骤,请参考专门介绍安装与部署的另一篇博文《ActiveMQ的安装与部署》。

2 配置Active MQ 依赖

      关于如何搭建 Spring Boot工程,请移步《基于 intellij IDEA 快速搭建Spring Boot项目》。假设项目已经创建完毕,在项目 pom 文件中加入Active MQ依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>

3 修改application.properties配置文件

在application.properties中配置Active MQ:

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
#默认值false,表示点到点模式,true时代表发布订阅模式
spring.jms.pub-sub-domain=false

4 创建消息生产者和消费者

      本文以点到点消息模式演示。新增消息生产者:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service; import javax.jms.Destination; @Service("producer")
public class Producer {
/**
* 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装
*/
@Autowired
private JmsMessagingTemplate jmsTemplate; /**
* 发送消息,destination是发送到的队列,message是待发送的消息
*
* @param destination
* @param message
*/
public void sendMessage(Destination destination, final String message) {
jmsTemplate.convertAndSend(destination, message);
}
}

通过JmsMessagingTemplate 的convertAndSend方法向目的地 destination发送消息。 新增消息监听者:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; @Component
public class ConsumerListener {
private static Logger logger = LoggerFactory.getLogger(ConsumerListener.class);
/**
* 使用JmsListener配置消费者监听的队列
* @param receivedMsg 接收到的消息
*/
@JmsListener(destination = "myDest.queue")
public void receiveQueue(String receivedMsg) {
logger.info("Consumer收到的报文为: {}", receivedMsg);
}
}

@JmsListener是Spring 4.1 提供的一个新特性,用于简化JMS开发,只需使用此注解的属性destination指定要监听的目的地【myDest.queue】,即可接收该目的地发送的消息。消费者2 ConsumerListener2 的代码同上,但是日志如下:

        logger.info("Consumer2收到的报文为: {}", receivedMsg);

温馨提示,消息消费者和生产者的类上必须加上注解 @Component 或者 @Service,使得消息消费者类就会被委派给Listener类,原理类似于使用SessionAwareMessageListener以及MessageListenerAdapter来实现消息驱动POJO。

5 测试 MQ

      在Junit测试类中新增测试方法
import org.apache.activemq.command.ActiveMQQueue;
import javax.jms.Destination; @Autowired
private Producer producer;
@Test
public void jmsActiveMqTest() throws InterruptedException {
Destination destination = new ActiveMQQueue("myDest.queue");
for (int i = 0; i < 21; i++) {
producer.sendMessage(destination, String.format("My name is Wiener%s", i));
}
}

控制台显示消费者接收到的消息如下:

Consumer收到的报文为: My name is Wiener0
Consumer2 收到的报文为:My name is Wiener1
Consumer收到的报文为: My name is Wiener2
Consumer2 收到的报文为:My name is Wiener3
Consumer收到的报文为: My name is Wiener4
Consumer2 收到的报文为:My name is Wiener5
Consumer收到的报文为: My name is Wiener6
Consumer2 收到的报文为:My name is Wiener7
...
      经过上面的五个步骤,spring Boot、Jms 和 Active MQ 就基本上整合完成了,是不是使用起来很方便了!
 

Reference

 
  1. https://www.cnblogs.com/zfblog/p/7371970.html
  2. JavaEE开发的颠覆者: Spring Boot实战
 

Spring Boot 整合 JMS(Active MQ 实现)的更多相关文章

  1. spring boot整合JMS(ActiveMQ实现)

    pom依赖如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...

  2. spring boot整合activemq消息中间件

    spring boot整合activemq消息中间件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...

  3. RabbitMQ使用及与spring boot整合

    1.MQ 消息队列(Message Queue,简称MQ)——应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...

  4. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  5. spring boot 整合 mybatis 以及原理

    同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...

  6. Spring Boot 整合JDBC 实现后端项目开发

    一.前言 二.新建Spring Boot 项目 三.Spring Boot 整合JDBC 与MySQL 交互 3.1 新建数据表skr_user 3.2 Jdbcproject 项目结构如下 3.3 ...

  7. activeMQ入门+spring boot整合activeMQ

    最近想要学习MOM(消息中间件:Message Oriented Middleware),就从比较基础的activeMQ学起,rabbitMQ.zeroMQ.rocketMQ.Kafka等后续再去学习 ...

  8. Spring Boot 整合 Hibernate5

    Run java -jar -Dspring.profiles.active=dev sport.web.services.jar Maven <parent> <groupId&g ...

  9. Spring Boot (十三): Spring Boot 整合 RabbitMQ

    1. 前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷.消息分发的作用. 消息队列在比较主要的一个作用是用 ...

  10. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

随机推荐

  1. vue生命周期调用

    <template> <div> <!-- 用户页的面包屑导航 --> <nav aria-label="breadcrumb"> ...

  2. C# 中的“相等判断”

    C# 中的"相等判断" C# 中判断相等的方式很多,例如: 双等号 ==​ 实例的 Equals()​ 方法 ​Object.Equals()​ 静态方法 ​Object.Refe ...

  3. mysql 表的创建,修改,删除

    查看数据库所有表 show tables 创建 create table 表名 ( 列名 类型 约束条件 ... ) 类型有整形: tinyint(1B) ,smallint(2B),mediumin ...

  4. MAMP PRO教程

    简单使用 第一步 创建新主机,按主机表左下角的"+"按钮. 第二步 配置域名和项目地址 第三步 选择你要使用的web服务器 第四步 配置URL重写规则 第五步 检查端口号 第六步 ...

  5. linux命令:lsof命令

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 ...

  6. Pydantic递归模型深度校验36计:从无限嵌套到亿级数据的优化法则

    title: Pydantic递归模型深度校验36计:从无限嵌套到亿级数据的优化法则 date: 2025/3/26 updated: 2025/3/26 author: cmdragon excer ...

  7. pg的计算百分数的问题

    SELECT cast("dept_id" as varchar(32)) , cast("dept_name" as varchar(30)) AS &quo ...

  8. TMS WEB Core的DEMO

    TMS WEB Core的思路就是把你界面设计转换成js.这个打通了,将会使生产效率呈几何级数提高. 说如何让其demo的能跑起来: 1.看图.增加参数(TMSHttpConfig.exe). 2.运 ...

  9. 生命游戏Delphi实现

    生命游戏,康威生命游戏(Game of Life),剑桥大学约翰·何顿·康威设计的计算机程序. 生命游戏没有游戏玩家各方之间的竞争,也谈不上输赢,可以把它归类为仿真游戏.事实上,也是因为它模拟和显示的 ...

  10. pnpm create vite my-react-app --template react-ts

    npm install -D pnpm npm install -D vite pnpm create vite my-react-app --template react-ts npx vite - ...