Spring Boot系列(十二)Spring Boot整合ActiveQ实现消息收发和订阅
2019独角兽企业重金招聘Python工程师标准>>>
javax.jms.ConnectionFactory接口提供了一个标准的用于创建一个javax.jms.Connection的方法,javax.jms.Connection用于和JMS代理(broker)交互。尽管为了使用JMS,Spring需要一个ConnectionFactory,但通常不需要直接使用它,而是依赖于上层消息抽象,Spring Boot会自动配置发送和接收消息需要的设施(infrastructure)。
如果发现ActiveMQ在classpath下可用,Spring Boot会配置一个ConnectionFactory。如果需要代理,将会开启一个内嵌的,已经自动配置好的代理(只要配置中没有指定代理URL)。
引入spring-boot-starter-activemq,在pom.xml配置文件中增加配置如下(基于之前章节“Spring Boot 构建框架”中的pom.xml文件):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
ActiveMQ配置是通过spring.activemq.*中的外部配置来控制的。在application.properties配置文件增加如下内容:
spring.activemq.broker-url=tcp://192.168.1.100:9876
spring.activemq.user=admin
spring.activemq.password=secret
默认情况下如果目标不存在,ActiveMQ将创建一个,所以目标是通过它们提供的名称解析出来的。
应用整合AxtiveQ支持案例
消息生产者,具体代码如下:
import javax.jms.Destination; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service; @Service("producer")
public class Producer { // 该方式可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装 @Autowiredprivate JmsMessagingTemplate jmsTemplate; // 发送消息,destination是发送到的队列,message是待发送的消息 public void sendMessage(Destination destination, final String message){ jmsTemplate.convertAndSend(destination, message); }
}
两个消息消费者,具体代码如下:
/***************** Consumer1 ******************/import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; @Component
public class Consumer { // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息 @JmsListener(destination = "mytest.queue") public void receiveQueue(String text) { System.out.println("Consumer收到的报文为:"+text); }
} /***************** Consumer2 ******************/import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; @Component
public class Consumer2 { // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息 @JmsListener(destination = "mytest.queue") public void receiveQueue(String text) { System.out.println("Consumer2收到的报文为:"+text); }
}
注意的是消息消费者的类上必须加上@Component或@Service注解,这样的话,消息消费者类就会被委派给Listener类,原理类似于使用SessionAwareMessageListener以及MessageListenerAdapter来实现消息驱动POJO。
简单测试消息情况,具体代码如下:
import javax.jms.Destination; import org.apache.activemq.command.ActiveMQQueue;
import org.junit.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; @RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootJmsApplicationTests { @Autowired private Producer producer; @Test public void contextLoads() throws InterruptedException { Destination destination = new ActiveMQQueue("mytest.queue"); for(int i=0; i<100; i++){ producer.sendMessage(destination, "my site is blog.yoodb.com"); } } }
运行结果如下:
Consumer2收到的报文为:my site is blog.yoodb.com
Consumer收到的报文为:my site is blog.yoodb.com
Consumer2收到的报文为:my site is blog.yoodb.com
Consumer收到的报文为:my site is blog.yoodb.com
Consumer2收到的报文为:my site is blog.yoodb.com
Consumer收到的报文为:my site is blog.yoodb.com
Consumer2收到的报文为:my site is blog.yoodb.com
Consumer收到的报文为:my site is blog.yoodb.com
Consumer2收到的报文为:my site is blog.yoodb.com
Consumer收到的报文为:my site is blog.yoodb.com
Consumer2收到的报文为:my site is blog.yoodb.com
Consumer收到的报文为:my site is blog.yoodb.com
Consumer2收到的报文为:my site is blog.yoodb.com
转载于:https://my.oschina.net/architectliuyuanyuan/blog/1620955
Spring Boot系列(十二)Spring Boot整合ActiveQ实现消息收发和订阅相关推荐
- Spring cloud系列十二 监控Hystrix界面:Hystrix dashboard 和 Turbine
1. 概述 为了更好的监控Hystrix的性能,Spring Cloud提供Hystrix dashboard和Turbin来达到这个目的. Hystrix dashboard可以实时监控Hystri ...
- Spring cloud系列十八 Spring Cloud 从Dalston.SR5到Greenwich.SR1 的升级记录
背景 项目之前一直使用Spring Cloud Dalston.SR5,但是此版本2018年12月软件生命周期要结束,为了后续安全和维护的需要,需要将对版本进行升级.先从官网上分析D版本的后续版本的变 ...
- Spring源码系列(十二)Spring创建Bean的过程(二)
1.写在前面 上篇博客主要Spring在创建Bean的时候,第一次调用的Bean的后置处理器的过程,同时笔者也打算将整个Spring创建的Bean的过程,通过这个系列,将Bean的创建过程给讲清楚,废 ...
- Spring Boot(十二)集成spring-boot-starter-mail发送邮件
项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(十二)集成spring-boot-starter-mail发 ...
- Alamofire源码解读系列(十二)之请求(Request)
本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...
- kotlin杂谈系列十二(Kotlin和Java的互操作)
Kotlin杂谈系列十二 这次就主要来谈谈kotlin和java互操作的问题 kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在 ...
- Reflex WMS入门系列十二:Reflex里的Location
Reflex WMS入门系列十二:Reflex里的Location 玩过SAP系统里的人都知道,在SAP系统里库存管理分为IM Level和WM Level.IM Level的仓库,在SAP里被定义为 ...
- Highcharts翻译系列十二:gauge测量图
Highcharts翻译系列十二:gauge测量图 说明 测量图需要highcharts-more.js的支持 属性 参数 描述 默认值 animation 动画 true color 主要颜色或序列 ...
- xen是服务器虚拟化,xen虚拟化实战系列(十二)之xen虚拟机高可用之在线迁移
xen虚拟化实战系列文章列表 xen虚拟化实战系列(十三)之xen虚拟机集中管理之convirt 1. 方案背景概述 本文是有对我们一个xen虚拟化生产环境将要改造的一个方案而来,在项目上线初期,没有 ...
最新文章
- 数据库中的select 1,select count(1),order by 1
- (转载)hive文件存储格式
- Android6.0 Log的工作机制
- 2015 提高组 跳石头--二分答案
- vue项目职责_进大厂兼职的机会来了!腾讯微校项目招人了!
- 科研汪的日常--一朝误入静电容,从此机械了如空(Niz静电容开箱)
- 5 个鲜为人知 GNU 调试器(GDB)技巧 | Linux 中国
- element table多选表格_【经验总结】vue + element-ui 踩坑—— table 篇
- iOS中如何旋转UIView
- 机器学习-吴恩达-笔记-12-推荐系统
- 在知行EDI系统中实施SNIP验证
- 按键精灵易语言c,易语言插件按键精灵调用方法
- Camera 图像处理原理分析- 色彩篇 二
- 冰汽朋克侦查机器人_寒霜朋克全系统解析攻略 冰汽时代全法典全科技详解
- java normalize_node.js中的path.normalize方法使用说明
- ZYNQ PS GPIO MIO 基础知识
- 论文研究12:DUAL-PATH RNN for audio separation
- 变压器直流电阻测试仪RS485串口数据采集接入数据库及MESERP系统方案
- Bloomberg彭博终端函数和EXCEL插件
- 一、Python的应用场景
热门文章
- 初读JavaScript DOM编程艺术(一)
- JavaScript(二)—— JavaScript 运算符/JavaScript 流程控制/JavaScript 数组
- 奇怪的象棋游戏及升级版
- mysql树状查询优化_解析SQL中树形分层数据的查询优化
- oracle以32位运行,Oracle在 32位系统上运行突破sga1.7g的方法
- java比较时间戳大小_JAVA中两个String类型的时间戳怎么样比较大小?
- linux 读分区表文件,Linux 磁盘分区表、文件系统查看和操作
- import是引进外部函数吗_CMake之引入外部项目的三种方法
- 关于(我们流量表优化),分区表数据块过多,聚合又导致数据倾斜问题
- 信号量semaphore 读写锁ReadWriteLock 倒计时器CountDownLatch 循环栅栏 CyclicBarrier 线程阻塞工具类LockSupport...