我们使用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. SQL Server 2025 AI相关能力初探

    SQL Server 在2024年11月开始进行社区私有预览(链接),由于涉及AI能力,我也是第一时间申请了内侧资格,悲剧的是,直到2025年2月,才拿到预览版的测试资格-.-,此时已经是CTP1.3 ...

  2. 震惊!AI 编程竟然让程序员 “失业” 了?真相让人意外

    在科技飞速发展的当下,AI 编程的异军突起无疑成为了整个编程领域乃至社会各界热议的焦点. 去年,全球首个AI程序员Devin横空出世,不仅能独立完成代码开发.修复Bug,甚至能通过阅读技术文档自主学习 ...

  3. ABAQUS阻尼设置

    结构阻尼 瑞利阻尼

  4. 基于Element的el-input实现一个可以显示千分位符的金额输入框

    直接上代码 1 <template> 2 <!-- 定义一个 Element UI 的输入框组件 --> 3 <el-input 4 v-model="form ...

  5. php nginx 504 Gateway Timeout 网关超时错误

    对于 Nginx + FastCGI上的504网关超时错误(php-fpm),我们可以修改PHP和nginx的执行超时时间. 配置php 修改 php.ini(CentOS路径是/etc/php.in ...

  6. 200条Git命令复习总结使用

    新建 创建一个新的 git 版本库.这个版本库的配置.存储等信息会被保存到.git 文件夹中 # 初始化当前项目 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init ...

  7. websocket 后台新订单通知 —— Laravel 5.8 workman PHPSocket.IO教程

    websocket 后台新订单通知 -- Laravel 5.8 Laravel-echo-server教程 PHPSocket.IO,PHP跨平台实时通讯框架 PHPSocket.IO是PHP版本的 ...

  8. deepseek内网离线部署手册

    前言 在当下 AI 浪潮汹涌的时代,DeepSeek 以其卓越的性能和出色的表现,迅速成为了众多专业人士和科技爱好者热议的焦点工具.在众多AI大模型的比拼中,DeepSeek 展现出了优越的实力.然而 ...

  9. 【Web】前端框架对微软老旧浏览器的支持

    零.原因 最近要做一个项目,要能在学校机房运行的,也要在手机上运行.电脑和手机,一次性开发,那最好的就是响应式前端框架了.手机和正常的电脑兼容性问题应该都不大,但是学校机房都是Win7的系统,自带的都 ...

  10. 经过几天的努力Biwen.AutoClassGen终于实现了DTO复杂属性的生成

    前言 距写上一篇 https://www.cnblogs.com/vipwan/p/18535459 生成DTO已经有一段时间了, 最初没有考虑复杂二级属性嵌套的实现,而是直接使用排除使用自定义的方式 ...