1.导入jar包:

    <!--jmsTemplate--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId></dependency>

2.填写配置文件(application.properties)

#设置JMS(AMQ)
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true
#spring.jms.pub-sub-domain=true
spring.activemq.pool.max-connections=50
spring.activemq.pool.expiry-timeout=10000
spring.activemq.pool.idle-timeout=30000

上面需要注意的是,如果开启订阅者和发布者模式下面的代码会使监听器失效。

3.编写控制器代码

@RestController
@RequestMapping("/Jms")
public class ProducerController {@Autowiredprivate JmsProducerService jmsProducerService;@RequestMapping("/send")public void contextLoads() throws InterruptedException {Destination destination = new ActiveMQQueue("mytest.queue");for(int i=0; i<10; i++){jmsProducerService.sendMessage(destination, "我是超人啊");}System.out.println("发送成功");}}

4.服务层代码:

package com.zzf.finals.service.impl;import com.zzf.finals.service.JmsProducerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;import javax.jms.Destination;@Service
public class JmsProducerServiceImpl implements JmsProducerService {@Autowiredprivate JmsTemplate jmsTemplate;@Overridepublic void sendMessage(Destination destination, String message) {this.jmsTemplate.convertAndSend(destination,message);}
}

5.最后加上监听器类

package com.zzf.finals.domain;import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;@Component
public class Consumer {@JmsListener(destination = "mytest.queue")public void receiveQueue(String text) {System.out.println("Message:"+text);}
}

OK~

但是这样有另外一个问题:如果开启了订阅者和发布者模式则无法发送和接收queue消息。

这里我提供两种写法xml和java配置:

首先贴上我的xml配置代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--连接池,内部引入一个连接工厂--><bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"destroy-method="stop"><property name="connectionFactory"><bean class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL"><value>tcp://localhost:61616</value></property></bean></property><property name="maxConnections" value="100"></property></bean><bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue"><constructor-arg name="name" value="spring-queue"/></bean><!--测试Topic--><bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic"><constructor-arg name="name" value="spring-topic"/></bean><!--配置消息容器--><bean id="TopicContainers" class="org.springframework.jms.config.DefaultJmsListenerContainerFactory"><property name="pubSubDomain" value="true"/><property name="connectionFactory" ref="jmsFactory"/></bean><!--配置队列消息容器--><bean id="QueueContainers" class="org.springframework.jms.config.DefaultJmsListenerContainerFactory"><property name="connectionFactory" ref="jmsFactory"/></bean></beans>

JavaConfig配置为:

package com.zzf.finals.domain;import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import javax.jms.Topic;@Configuration
public class JmsConfig {public final static String TOPIC = "topic.test";public final static String QUEUE = "queue.test";@Beanpublic Queue queue() {return new ActiveMQQueue(QUEUE);}@Beanpublic Topic topic() {return new ActiveMQTopic(TOPIC);}// topic模式的ListenerContainer@Beanpublic JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();bean.setPubSubDomain(true);bean.setConnectionFactory(activeMQConnectionFactory);return bean;}// queue模式的ListenerContainer@Beanpublic JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();bean.setConnectionFactory(activeMQConnectionFactory);return bean;}}

控制台代码为:

package com.zzf.finals.controller;import com.zzf.finals.service.JmsProducerService;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.jms.Destination;
import javax.jms.Queue;
import javax.jms.Topic;@RestController
@RequestMapping("/Jms")
public class ProducerController {@Autowiredprivate JmsProducerService jmsProducerService;@Autowiredprivate Topic topic;@Autowiredprivate Queue queue;@Autowiredprivate Topic destinationTopic;@Autowiredprivate Queue destinationQueue;@RequestMapping("/send3")public void testJms2() {for (int i=0;i<10;i++) {jmsProducerService.sendMessage(destinationQueue,"queue,world!" + i);jmsProducerService.sendMessage(destinationTopic, "topic,world!" + i);}}@RequestMapping("/send2")public void testJms() {for (int i=0;i<10;i++) {jmsProducerService.sendMessage(queue,"queue,world!" + i);jmsProducerService.sendMessage(topic, "topic,world!" + i);}}@RequestMapping("/send")public void contextLoads() throws InterruptedException {Destination destination = new ActiveMQQueue("mytest.queue");for(int i=0; i<10; i++){jmsProducerService.sendMessage(destination, "我是超人啊");}System.out.println("发送成功");}}

最后的监听器类:

package com.zzf.finals.domain;import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;@Component
public class Consumer {@JmsListener(destination = "mytest.queue")public void receiveQueue(String text) {System.out.println("Message:"+text);}@JmsListener(destination = JmsConfig.TOPIC,containerFactory = "jmsListenerContainerTopic")public void onTopicMessage(String msg) {System.out.println("topic:"+msg);}@JmsListener(destination = JmsConfig.QUEUE,containerFactory = "jmsListenerContainerQueue")public void onQueueMessage(String msg) {System.out.println("queue:"+msg);}@JmsListener(destination = "spring-topic",containerFactory = "TopicContainers")public void onTopicMessageXML(String msg) {System.out.println("topic1:"+msg);}@JmsListener(destination = "spring-topic",containerFactory = "TopicContainers")public void onTopicMessageXML2(String msg) {System.out.println("topic2:"+msg);}@JmsListener(destination = "spring-queue",containerFactory = "QueueContainers")public void onQueueMessageXML(String msg) {System.out.println("queue:"+msg);}
}

OK~JmsTemplate的使用和配置Demo就完成了 ,有兴趣的可以自己跑下试试

SpringBoot集成JmsTemplate(队列模式和主题模式)(xml和JavaConfig配置实现)相关推荐

  1. java 配置jmstemplate_SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解...

    1.导入jar包: org.springframework.boot spring-boot-starter-activemq org.apache.activemq activemq-pool 2. ...

  2. 五、交换机 与 发布/订阅模式、路由模式、主题模式

    RabbitMQ目录 文章目录 交换机 与 发布/订阅模式.路由模式.主题模式 1.Exchanges(交换机) 1.1. Exchanges 概念 1.2. Exchanges 的类型 1.3. 无 ...

  3. 【转】RabbitMQ六种队列模式-5.主题模式

    前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题 ...

  4. ActiveMQ消息中间件之队列模式和主题模式详解

    一.ActiveMQ消息中间件 在传统的消息发送和接收模式上,一般是以同步的方式来发送接收消息,以同步的方式来推送消息对我们的服务有时造成了很大的影响,比如当我们的服务器出现了故障,客户端推送消息到服 ...

  5. (八)RabbitMQ消息队列-通过Topic主题模式分发消息

    前两章我们讲了RabbitMQ的direct模式和fanout模式,本章介绍topic主题模式的应用.如果对direct模式下通过routingkey来匹配消息的模式已经有一定了解那fanout也很好 ...

  6. RabbitMQ之订阅模式与主题模式,消息确认机制

    1.订阅模式 作用类似与微信公众号,你订阅了就可以接收到消息 解读: 1.一个生产者,多个消费者. 2.每一个消费者 都有自己的队列 3.生产者没有直搂把洧息发送到队列而是发到了交换机 转发器exch ...

  7. 01_MyBatis EHCache集成及所需jar包,ehcache.xml配置文件参数配置及mapper中的参数配置

     1 与mybatis集成时需要的jar ehcache-core-2.6.5.jar mybatis-ehcache-1.0.2.jar Mybatis.日志.EHCache所需要的jar包如下 ...

  8. RabbitMQ 进阶 -- SpringBoot 集成 RabbitMQ实现生产者与消费者模式

  9. RabbitMQ消息分发模式----Topic主题模式

    前面虽然有Direct类型和Fanout的转换器.但它们仍然有一定的局限性--不能根据多重条件进行路由选择. Topic exchange(主题转发器) 发送给主题转发器的消息不能是任意设置的选择键, ...

最新文章

  1. 【数据结构】二叉树的应用。
  2. 《JAVA程序设计》第七周学习总结
  3. ACM PKU 2299 Ultra-QuickSort
  4. C#中的is、as及转换
  5. Uniswap V3的流通性突破5亿美元,24小时交易量仅次于V2和Sushiswap
  6. python不能安装的问题_无法安装pythoncolam
  7. 【转】php需要掌握的东西
  8. Airmail 5 for Mac(轻量级邮件客户端)
  9. java中的配置文件
  10. 【OpenCL开发入门】01 - 搭建Visual Studio 2022+OpenCL开发环境
  11. [分析力学]解题思路 - 最小作用量原理
  12. 。快充的原理有三种:电压不变、提升电流,电流不变,提升电压,电流电压两者都提高。要想达到这三种方式的其中一种,我们都需要对充电头和充电线进行掌控。
  13. 计算机的域怎么取消,怎么解除电脑域?
  14. 商业百科——最具公关营销价值的商业百科平台
  15. 关于我为什么跨考计算机研究生以及对未来的思考
  16. InfluxDB 2.0 原理与应用实践
  17. android 应用置顶到最前端_Android 将后台应用切换到前台
  18. Matlab语句:rmoutliers(检测并删除数据中的离群值)
  19. 2009世界500强排名(2009年07月08日)
  20. 工作汇报PPT模板推荐

热门文章

  1. Redis高可用集群主流架构方案分析
  2. 快手直播电商2.0时代:从「货」到「人」,重构商品交易逻辑
  3. 大话数据结构笔记(一)
  4. vue3导出excel表格方式 ---XLSX文件(最快的导出方法 )
  5. 什么是网络存储技术?DAS、NAS、SAN、IP-SAN,主要内容分别是什么?
  6. 创建TLS客户端凭据时发生严重错误,内部错误状态为10013
  7. ESP32驱动喇叭(syn6288),UTF-8转Unicode,包含中文驱动
  8. 神经网络是模型还是算法,神经网络预测模型优点
  9. 安卓Activity跳转的几种方式
  10. Apache Drill源码分析(2) 分析一次具体的查询过程以及RPC