解决Springboot整合ActiveMQ发送和接收topic消息的问题
环境搭建
1.创建maven项目(jar)
2.pom.xml添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
</dependencies>
3.编写引导类
@SpringBootApplication
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
4.在resources下的application.properties配置文件中添加对应的配置
spring.activemq.broker-url=tcp://192.168.25.131:61616
#此url为activeMQ所在服务器的链接
5.在类中注入JmsMessageTemplate
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
6.调用JmsMessageTemplate的方法发送消息
jmsMessagingTemplate.convertAndSend(“queue消息名称”,"消息内容");
设置消息发送类型
在引导类中配置消息类型
Queue
@Bean(name="queue")
public Destination getQueue(){
return new ActiveMQQueue("queue_test");
}
Topic
@Bean(name="topic")
public Destination getTopic(){
return new ActiveMQTopic("topic_test");
}
类中注入发送消息类型
在发送消息的类中注入发送消息类型对象Destination
Queue
@Resource(name="queue")
private Destination queue;
Topic
@Autowired
@Qualifier(value="topic")
private Destination topic;
消息发送
jmsMessageTemplate.convertAndSend(queue,"消息内容");
jmsMessageTemplate.convertAndSend(topic,"消息内容");
编写消费者
@Component
public class ActiveMQConsumer {
//接收queue消息
@JmsListener(destination = "queue_test")
public void handler(String message){
System.out.println(message);
}
//接收topic消息
@JmsListener(destination = "topic_test")
public void handlerTopic(String msessage){
System.out.println(msessage);
}
}
启动测试
controller类的方法中添加
@RequestMapping("/send")
public void sendQueue(){
jmsMessagingTemplate.convertAndSend(queue,"这是Queue的消息");
jmsMessagingTemplate.convertAndSend(topic,"这是Topic的消息");
}
运行后,在控制台只输出了Queue的消息

问题
Springboot整合ActiveMQ模式只能监听Queue队列的消息进行处理,所以如何处理topic消息?
解决:
在Springboot的application.properties文件中添加如下内容
spring.jms.pub-sub-domain=true //默认是false,开启发布订阅模式
启动测试

经过上述修改,又只能监听topic的消息,queue的消息又无法获取。
解决:
只有通过自定义监听器类来处理
在监听器类的@JmsListener添加connectionFactory属性
@Component
public class ActiveMQConsumer {
//接收queue消息
@JmsListener(destination = "queue_test",containerFactory =
"queueListenerContainerFactory")
public void handler(String message){
System.out.println(message);
}
//接收topic消息
@JmsListener(destination = "topic_test",containerFactory =
"topicListenerContainerFactory")
public void handlerTopic(String msessage){
System.out.println(msessage);
}
}
创建一个配置类,在配置类中提供两个监听工厂配置
@Configuration
public class ConsumerConfiguration { @Value("${spring.activemq.broker-url}")
private String host; @Bean
public ConnectionFactory getActiveMqConnection(){
return new ActiveMQConnectionFactory(host);
} @Bean(name="queueListenerContainerFactory")
public JmsListenerContainerFactory queueListenerContailerFactory(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(false);
return factory;
}
@Bean(name="topicListenerContainerFactory")
public JmsListenerContainerFactory topicListenerContainerFactory(ConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
}
运行测试

解决Springboot整合ActiveMQ发送和接收topic消息的问题的更多相关文章
- SpringBoot整合ActiveMq实现Queue和Topic两种模式(看不懂你来打我)
目录 一.前言 二.ActiveMq的下载和使用 三.依赖准备 四.yml文件配置 五.配置Bean 六.创建生产者(Queue+Topic) 七.创建消费者(Topic模式下) 八.测试结果(Top ...
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...
- ActiveMQ 笔记(四)Spring\SpringBoot 整合 Activemq
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Spring 整合Activemq 1.所需jar包 <dependencies> &l ...
- Web项目容器集成ActiveMQ & SpringBoot整合ActiveMQ
集成tomcat就是随项目启动而启动tomcat,最简单的方法就是监听器监听容器创建之后以Broker的方式启动ActiveMQ. 1.web项目中Broker启动的方式进行集成 在这里采用Liste ...
- SpringBoot整合ActiveMQ快速入门
Spring Boot 具有如下特性: 为基于 Spring 的开发提供更快的入门体验 开箱即用,没有代码生成,也无需 XML 配置.同时也可以修改默认值来满足特定的需求. 提供了一些大型项目中常见的 ...
- SpringBoot整合ActiveMQ和开启持久化
一.点对点 1.提供者目录展示 2.导入依赖 <dependency> <groupId>org.springframework.boot</groupId> &l ...
- 2.技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化
转自:https://www.cnblogs.com/chenying99/archive/2013/05/23/3094128.html 技巧: 用 JAXM 发送和接收 SOAP 消息—Java ...
- (七)发送、接收SOAP消息(以HttpClient方式)(2)
一.为什么要用soap 原本我们使用web服务都是根据wsdl生成客户端(生成一堆java文件)然后再调用,本章节讲解如何用soap消息来替代这种方式. 二.SOAP消息格式 SOAP(简单对象访问协 ...
- SpringBoot整合ActiveMQ,看这篇就够了
ActiveMQ是Apache提供的一个开源的消息系统,完全采用Java来实现,因此它能很好地支持JMS(Java Message Service,即Java消息服务)规范:本文将详细介绍下Activ ...
随机推荐
- [ZJOI2006]物流运输 题解
[ZJOI2006]物流运输 时间限制: 10 Sec 内存限制: 162 MB 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个 ...
- Neo4j电影关系图
“电影关系图”实例将电影.电影导演.演员之间的复杂网状关系作为蓝本,使用Neo4j创建三者关系的图结构,虽然实例数据规模小但五脏俱全. 步骤: 一. 创建图数据:将电影.导演.演员等图数据导入Neo4 ...
- 记一次愚蠢的经历--String不可变性
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 记录一次在写代码时愚蠢的操作,本文涉及到的知识点:S ...
- cesium 学习(五) 加载场景模型
cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...
- 什么是Java EE
Java:是一门编程语言,可以用来编写各种应用程序. Java EE:是一个标准中间件体系结构,旨在简化和规范分布式多层企业应用系统的开发和部署. Java EE是一个标准中间件体系结构 Java E ...
- 《VR入门系列教程》之17---发布第一个应用
发布运行 Unity可以支持多种目标平台的发布,包括:桌面端.Web端.移动端.游戏主机端. 发布运行之前的Cubes场景至桌面端,我们先选择File->Build Settin ...
- jquery实现最简单的下拉菜单
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- java基础知识必备(一)
一,开发前奏 a.Java语言的发展历史. Java语言是美国Sun公司(Stanford University Network/斯坦福大学网络公司), 在199 ...
- 章节十五、5-记录日志---Log4j
一.为什么要用Log4j记录日志? 日志记录对于任何应用程序都非常重要. 它可以帮助我们快速调试代码,通过收集代码执行的信息让代码容易维护. 二.Log4j 是什么? Apache为Java提供的日志 ...
- Python pip包管理器安装第三方库超时解决方案
一.国内镜像安装 使用方法:pip install --index 镜像网站 第三方库名 二.镜像网站 http://pypi.douban.com/simple/ 豆瓣 http://mirrors ...