Activemq Queue与Topoic并存 的解决办法
来源:互联网 发布:美工摄影师招聘 编辑:程序博客网 时间:2024/05/29 06:42
所有配置基于spring boot 1.4.2
1.引入相关的maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId></dependency>
2.application.properties中定义相关配置项
//activeMQ地址spring.activemq.broker-url=tcp://172.18.1.18:61616
3.指定消息消费者
import org.springframework.jms.annotation.JmsListener;import org.springframework.stereotype.Service;@Servicepublic class MQConsumerService { @JmsListener(destination = "sample.queue") // 监听指定消息队列 public void receiveQueue(String message) { System.out.println(message); }}
监听订阅主题
application.properties中定义相关配置项
spring.jms.pub-sub-domain=true
指定消息消费者
import org.springframework.jms.annotation.JmsListener;import org.springframework.stereotype.Service;@Servicepublic class MQConsumerService { @JmsListener(destination = "sample.topic") // 监听指定消息主题 public void receiveTopic(String message) { System.out.println(message); }}
Queue与Topoic并存
1.application.properties中定义相关配置项
spring.jms.pub-sub-domain=truespring.activemq.broker-url=tcp://172.18.1.18:61616#spring.activemq.user=按实际情况配置#spring.activemq.password=按实际情况配置 spring.activemq.in-memory=falsespring.activemq.pool.enabled=falsespring.activemq.pool.maxConnections=2spring.activemq.pool.expiryTimeout=0spring.activemq.pool.idleTimeout=30000spring.activemq.packages.trust-all=true
2.定义配置类
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jms.annotation.EnableJms;import org.springframework.jms.config.DefaultJmsListenerContainerFactory;import org.springframework.jms.config.JmsListenerContainerFactory;@Configuration@EnableJmspublic class JmsConfiguration { // topic模式的ListenerContainer @Bean public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setPubSubDomain(true); bean.setConnectionFactory(activeMQConnectionFactory); return bean; } // queue模式的ListenerContainer @Bean public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setConnectionFactory(activeMQConnectionFactory); return bean; }}
3.定义监听器实现
import org.springframework.jms.annotation.JmsListener;import org.springframework.stereotype.Service;@Servicepublic class MQConsumerService { @JmsListener(destination = "portal.admin.topic",containerFactory = "jmsListenerContainerTopic") // 监听指定消息主题 public void receiveTopic(String message) { System.out.println(message); } @JmsListener(destination = "portal.admin.queue",containerFactory = "jmsListenerContainerQueue") // 监听指定消息主题 public void receiveQueue(String message) { System.out.println(message); }}
4.查看activeMQ管理界面
扩展:自定义消息转换器
在前面的JmsConfiguration基础上添加JmsConfiguration定义,并在ListenerContainer的定义中设置消息转换器
import javax.jms.ConnectionFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jms.annotation.EnableJms;import org.springframework.jms.config.DefaultJmsListenerContainerFactory;import org.springframework.jms.config.JmsListenerContainerFactory;import org.springframework.jms.support.converter.MappingJackson2MessageConverter;import org.springframework.jms.support.converter.MessageConverter;import org.springframework.jms.support.converter.MessageType;@Configuration@EnableJmspublic class JmsConfiguration { /** * topic模式的ListenerContainer * @param activeMQConnectionFactory * @return */ @Bean public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setPubSubDomain(true); bean.setConnectionFactory(activeMQConnectionFactory); /** * 使用消息转换器 */ bean.setMessageConverter(jacksonJmsMessageConverter()); return bean; } /** * queue模式的ListenerContainer * @param activeMQConnectionFactory * @return */ @Bean public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setConnectionFactory(activeMQConnectionFactory); /** * 使用消息转换器 */ bean.setMessageConverter(jacksonJmsMessageConverter()); return bean; } /** * 消息转换器 * @return */ @Bean public MessageConverter jacksonJmsMessageConverter() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); converter.setTargetType(MessageType.TEXT); converter.setTypeIdPropertyName("_type"); return converter; }}
后续更新消息发送部分
参考链接:
https://github.com/spring-projects/spring-boot/pull/6356
http://serve.3ezy.com/stackoverflow.com/questions/40144561/how-to-listen-to-topic-using-spring-boot-jms
</div>
阅读全文
0 0
- Activemq Queue与Topoic并存 的解决办法
- ActiveMQ中Queue与Topic的比较
- ActiveMQ的Queue与Topic区别
- ActiveMq中Queue与Topic的简单分析
- spring boot Activitymq topic与 queue 并存实现方案
- ActiveMQ—Queue与Topic区别
- C# 控件 单双击并存的解决办法
- Jenkins与Hudson的并存
- activemq中queue的简单负载示例
- SQLServer2005与SQLServer2000并存的问题
- 高质量与高生产力的并存?
- 快乐与痛苦并存的一天
- GROUP_CONCAT与LIMIT并存的技巧
- ActiveMQ Queue和Topic
- ActiveMq-Queue开发
- Activemq学习笔记--Queue
- ActiveMQ发送queue消息
- Activemq的Queue发送和接收的例子
- Spring Aspectj代理 前置 后置以及异常
- Js获取当前日期时间及其它操作
- STL大合集
- HDU
- 将.sql文件导入powerdesigner的实现方法详解
- Activemq Queue与Topoic并存 的解决办法
- Fox And Two Dots
- Linux下JDK中文乱码解决
- Python 实现控制一阶惯性系统
- css中overflow的那些坑
- 大写转换(SQL优化)
- JAVA接口和JAVA抽象类的区别
- win10 wamp 打开报错0xc0000142
- 项目总结及坑点