解决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 ...
随机推荐
- 剑指offer第二版-1.赋值运算符函数
面试题1:赋值运算符函数题目要求:为自定义类添加赋值运算符函数,考察一些细节点的书写.
- 微信小程序开发--组件(5)
一.editor 富文本编辑器,可以对图片.文字进行编辑. 编辑器导出内容支持带标签的 html和纯文本的 text,编辑器内部采用 delta 格式进行存储. 通过setContents接口设置内容 ...
- 【并查集】连接格点-C++
连接格点 描述 有一个M行N列的点阵,相邻两点可以相连.一条纵向的连线花费一个单位,一条横向的连线花费两个单位.某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通. 输入 第一 ...
- 精美的在线icon
super-tiny-icons(0.2.1)列表 序号 名称 图标 地址 是否使用 1 acast.svg https://cdn.jsdelivr.net/npm/super-tiny-icons ...
- re模块:模式匹配与正则表达式
一.用正则表达式查找文本模式 正则表达式,简称regex,是文本模式的描述方法.比如\d是一个正则表达式,用于表示一位0~9的数字.在一个模式后面加上花括号包围的数字n(如{n}),表示匹配这个模式n ...
- Netty-解码器架构与常用解码器
任何数据类型想在网络中进行传输,都得经过编解码转换成字节流 在netty中,服务端和客户端进行通信的其实是下面这样的 程序 ---编码--> 网络 网路 ---解码--> 程序 对应服务端 ...
- Excel催化剂开源第16波-VSTO开发之脱离传统COM交互以提升性能
在VSTO开发或其他COM技术开发过程中,甚至VBA也是,在和Excel交互中,难免会遇到性能瓶颈问题,COM技术的交互实在太慢,对大量数据读写等操作,耗时太长,容易卡用户界面以为是程序死机等等. 在 ...
- 创建PaletteSet的一个问题
下面是一个常规创建PaletteSet面板的代码: public static PaletteSet m_ps = null; [CommandMethod("MyPalette" ...
- 描述符\get/set/delete,init/new/call,元类
6.23 自我总结 1.描述符__get__,__set__,__delete__ 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了____get__(),__set__(),__d ...
- VUE过滤器的使用 vue 时间格式化
过滤器介绍 官方教程地址:https://cn.vuejs.org/v2/guide/filters.html 过滤器常被用于一些文本格式化 我们可以自定义过滤器,可以实现各种各样的功能. vue时间 ...