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实现消息收发和订阅相关推荐

  1. Spring cloud系列十二 监控Hystrix界面:Hystrix dashboard 和 Turbine

    1. 概述 为了更好的监控Hystrix的性能,Spring Cloud提供Hystrix dashboard和Turbin来达到这个目的. Hystrix dashboard可以实时监控Hystri ...

  2. Spring cloud系列十八 Spring Cloud 从Dalston.SR5到Greenwich.SR1 的升级记录

    背景 项目之前一直使用Spring Cloud Dalston.SR5,但是此版本2018年12月软件生命周期要结束,为了后续安全和维护的需要,需要将对版本进行升级.先从官网上分析D版本的后续版本的变 ...

  3. Spring源码系列(十二)Spring创建Bean的过程(二)

    1.写在前面 上篇博客主要Spring在创建Bean的时候,第一次调用的Bean的后置处理器的过程,同时笔者也打算将整个Spring创建的Bean的过程,通过这个系列,将Bean的创建过程给讲清楚,废 ...

  4. Spring Boot(十二)集成spring-boot-starter-mail发送邮件

    项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(十二)集成spring-boot-starter-mail发 ...

  5. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

  6. kotlin杂谈系列十二(Kotlin和Java的互操作)

    Kotlin杂谈系列十二 这次就主要来谈谈kotlin和java互操作的问题 kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在 ...

  7. Reflex WMS入门系列十二:Reflex里的Location

    Reflex WMS入门系列十二:Reflex里的Location 玩过SAP系统里的人都知道,在SAP系统里库存管理分为IM Level和WM Level.IM Level的仓库,在SAP里被定义为 ...

  8. Highcharts翻译系列十二:gauge测量图

    Highcharts翻译系列十二:gauge测量图 说明 测量图需要highcharts-more.js的支持 属性 参数 描述 默认值 animation 动画 true color 主要颜色或序列 ...

  9. xen是服务器虚拟化,xen虚拟化实战系列(十二)之xen虚拟机高可用之在线迁移

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(十三)之xen虚拟机集中管理之convirt 1. 方案背景概述 本文是有对我们一个xen虚拟化生产环境将要改造的一个方案而来,在项目上线初期,没有 ...

最新文章

  1. 数据库中的select 1,select count(1),order by 1
  2. (转载)hive文件存储格式
  3. Android6.0 Log的工作机制
  4. 2015 提高组 跳石头--二分答案
  5. vue项目职责_进大厂兼职的机会来了!腾讯微校项目招人了!
  6. 科研汪的日常--一朝误入静电容,从此机械了如空(Niz静电容开箱)
  7. 5 个鲜为人知 GNU 调试器(GDB)技巧 | Linux 中国
  8. element table多选表格_【经验总结】vue + element-ui 踩坑—— table 篇
  9. iOS中如何旋转UIView
  10. 机器学习-吴恩达-笔记-12-推荐系统
  11. 在知行EDI系统中实施SNIP验证
  12. 按键精灵易语言c,易语言插件按键精灵调用方法
  13. Camera 图像处理原理分析- 色彩篇 二
  14. 冰汽朋克侦查机器人_寒霜朋克全系统解析攻略 冰汽时代全法典全科技详解
  15. java normalize_node.js中的path.normalize方法使用说明
  16. ZYNQ PS GPIO MIO 基础知识
  17. 论文研究12:DUAL-PATH RNN for audio separation
  18. 变压器直流电阻测试仪RS485串口数据采集接入数据库及MESERP系统方案
  19. Bloomberg彭博终端函数和EXCEL插件
  20. 一、Python的应用场景

热门文章

  1. 初读JavaScript DOM编程艺术(一)
  2. JavaScript(二)—— JavaScript 运算符/JavaScript 流程控制/JavaScript 数组
  3. 奇怪的象棋游戏及升级版
  4. mysql树状查询优化_解析SQL中树形分层数据的查询优化
  5. oracle以32位运行,Oracle在 32位系统上运行突破sga1.7g的方法
  6. java比较时间戳大小_JAVA中两个String类型的时间戳怎么样比较大小?
  7. linux 读分区表文件,Linux 磁盘分区表、文件系统查看和操作
  8. import是引进外部函数吗_CMake之引入外部项目的三种方法
  9. 关于(我们流量表优化),分区表数据块过多,聚合又导致数据倾斜问题
  10. 信号量semaphore 读写锁ReadWriteLock 倒计时器CountDownLatch 循环栅栏 CyclicBarrier 线程阻塞工具类LockSupport...