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

1.导入jar包:

org.springframework.boot

spring-boot-starter-activemq

org.apache.activemq

activemq-pool

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 {

@Autowired

private 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 {

@Autowired

private JmsTemplate jmsTemplate;

@Override

public 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);

}

}

b2e2d5f2b91fb21dc227ae0990684ff3.png

ecb889be8e50e8d01b61cde3e6e3c226.png

OK~

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

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

首先贴上我的xml配置代码

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

destroy-method="stop">

tcp://localhost:61616

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";

@Bean

public Queue queue() {

return new ActiveMQQueue(QUEUE);

}

@Bean

public Topic topic() {

return new ActiveMQTopic(TOPIC);

}

// 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;

}

}

控制台代码为:

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 {

@Autowired

private JmsProducerService jmsProducerService;

@Autowired

private Topic topic;

@Autowired

private Queue queue;

@Autowired

private Topic destinationTopic;

@Autowired

private 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);

}

}

74b4055bcee1d15661dfe890a4b97f21.png

ad71f6d78dac9a9ffb48beeb77a27a26.png

68ddf69eb244bf036855c91600e9a251.png

1b17f9ef2bae441b16f4d8928573626a.png

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

总结

到此这篇关于SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解的文章就介绍到这了,更多相关SpringBoot集成JmsTemplate内容请搜索聚米学院以前的文章或继续浏览下面的相关文章希望大家以后多多支持聚米学院!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

切面是异步还是同步操作‘_分布式中采用Logback的MDC机制与AOP切面结合串联日志...

导读&#xff1a;在实际开发中&#xff0c;打印日志是十分重要的。在生产环境中&#xff0c;如果日志打得好可以快速地排查问题&#xff0c;而在分布式的场景下&#xff0c;一个请求会跨越多个节点&#xff0c;既一个业务可能需要多个节点协调配合处理。那么日志将会分散&#…

java 图类_Java集合类,一张图说清楚!

作者&#xff1a;skywang12345https://www.cnblogs.com/skywa...2019-03-23 10:32:24Java集合是java提供的工具包&#xff0c;包含了常用的数据结构&#xff1a;集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*&#xff0c;Java集合主要可以划分为4个部分…

python 取整_马克的Python学习笔记#数字,日期和时间

对数值进行调整在Python中对整数和浮点数进行数字计算是很容易的。但是&#xff0c;如果你需要对分数&#xff0c;数组或者日期和时间进行计算&#xff0c;这就会稍微复杂点。对于简单的取整操作&#xff0c;我们可以使用内建的round(value, ndigits)函数就可&#xff0c;举个例…

各路由协议的协议号_厂房转让协议

厂房转让协议转让方(甲方)&#xff1a;________________受让方(乙方)&#xff1a;________________甲乙双方本着平等互利的原则&#xff0c;经协商一致就甲方将其权属的工业用地、厂房等转让与乙方及有关事项达成如下协议:一、工业用地及厂房产权基本情况本协议转让的工业用地位…

java web开发常见问题_JavaWeb学习笔记(五)--Web开发其他常见问题

一、把web应用打成war包使用JDK自带jar命令&#xff0c;进入到web应用里面&#xff0c;执行命令&#xff1a;jar -cvf 包名.war . # .表示当前目录所有的文件 直接用jar可查看帮助执行完成后生成一个demo.war文件&#xff0c;把这个文件拷贝到Tomcat的webapps下&#xff0c;Tom…

uwsgi怎么通过浏览器访问某个脚本_4个Shell小技巧帮你提高机器学习效率:写好脚本,事半功倍...

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI在机器学习的实践过程中&#xff0c;用好Shell能帮你很多节省时间。最近&#xff0c;有位来自ETHZ的学生分享了一些Shell小技巧。对程序员来说&#xff0c;这些技巧更重要的是让你的思维从琐碎小事中解脱出来&#xff0c;大大提高…

间接寻址级别不同_被遗忘的利息税,国债与存款的利率区别,同大额存单的4点大不同...

2020年6月10日的储蓄式电子国债发行又一次与理财人擦肩而过&#xff0c;因为疫情管控原因&#xff0c;此次暂时不发行&#xff0c;那么下一个认购国债的窗口&#xff0c;就是7月10日&#xff0c;仍然是储蓄式电子国债&#xff0c;期限还是3年期和5年期两种。那么能如期发行吗&a…

抽象类可以用new创建对象吗_宠物可以用人类的湿巾吗?猫咪有泪痕可以用纸巾擦掉吗?...

宠物还有专用的湿巾&#xff1f;当然喽&#xff01;不养宠物的小伙伴可能是无法理解的&#xff0c;人类的生活条件好了&#xff0c;宠物的生活条件在很多方面比人类还更上一层台阶呢&#xff01;喜欢逛宠物店和宠物展的小伙伴都会有这样的感慨&#xff0c;那就是人生不如喵生狗…

java什么时候需要同步_JAVA中线程在什么时候需要同步和互斥

JAVA中线程在什么时候需要同步和互斥关注:265 答案:6 mip版解决时间 2021-01-27 08:10提问者时光易老2021-01-27 03:32JAVA中线程在什么时候需要同步和互斥?(假如这题是考试题&#xff0c;要怎样回答&#xff1f;)详细点最佳答案二级知识专家樱花雨梦2021-01-27 04:13例如访…

5g虚拟技术旅游_5G造就文旅新时代,驴迹科技探索智慧出行创新领域

随着我国5G技术的成熟与普及&#xff0c;5G为文旅产业提供新的解决方案&#xff0c;使之焕发新的活力。以5G“新基建”为依托&#xff0c;结合VR虚拟实境以及云计算、高清视频等技术交叉应用&#xff0c;对旅游业的发展带来广泛而深刻的影响&#xff0c;给游客更新鲜、更具有科…

分块排序算法 java_十大经典排序算法最强总结(含JAVA代码实现)

转载自&#xff1a;https://www.cnblogs.com/guoyaohua/p/8600214.html0、排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定&#xff1a;如果a原本在b前面&#xff0c;而ab&#xff0c;排序之后a仍然在b的前面&#xff1b;不稳定&#xff1a;如…

synchronized锁升级_synchronized详解以及锁的膨胀升级过程

点击上方"码之初"关注&#xff0c;选择"设为星标"与精品技术文章不期而遇来源&#xff1a;www.cnblogs.com/cxiaocai/p/12189848.html架构之路远且艰辛&#xff0c;但是学习的脚步始终不能停止&#xff0c;今天聊一聊synchronized。synchronized是jvm内部的…

改变php二维数组的值_php如何修改二维数组中的值?

php修改二维数组中值的方法&#xff1a;1、通过【for($i 0; $i < count(Array()); $i)】语句修改&#xff1b;2、通过foreach($users as &$user)语句修改。php修改二维数组中值的方法&#xff1a;1、二维数组可以通过for($i 0; $i < count(Array()); $i)这种形式…

jlabel字怎么变化_怎样才能把字写好?详解最科学的练字方法及步骤

一&#xff1a;正确的学习之路1&#xff1a;临帖从古到今&#xff0c;临帖是学习书法最基本的方法&#xff0c;没有一个书法家是没有临过帖的。2&#xff1a;专注专注学一个书法家的字&#xff0c;专心致志&#xff0c;认真临写&#xff0c;持之以恒&#xff0c;直到形同神似。…

找不到具有指定id_JAVA如何整合es指定字段不分词搜索?

一、问题在做一个需求的时候&#xff0c;需要按照电话号码查询用户关系&#xff0c;所以我这边先讲相关信息同步到es&#xff0c;但是电话号码是加密的&#xff0c;所以显示的字符串是杂乱的&#xff0c;既有字母&#xff0c;又有斜杠等号等字符&#xff0c;在进行分词查询的时…

vant 项目_vueCli4+vant+router+vuex+移动端适配

教程的开始 各位同学请先安装node、npm、vuecli4 巴拉巴拉...废话不多说立即开始随便找个地方 cmd&#xff0c;powerShell也可以 命令行走起1. 创建vue项目 随便起个名字就叫my-vue吧&#xff0c;傻瓜式回车键就行&#xff0c;也可以根据自己的喜好选择eslint。vue create my-v…

电路结构原理_精密半波、全波整流电路结构原理图解

利用二极管(开关器件)的单向导电特性&#xff0c;和放大器的优良放大性能相结合&#xff0c;可做到对输入交变信号(尤其是小幅度的电压信号)进行精密的整流&#xff0c;由此构成精密半波整流电路。若由此再添加简单电路&#xff0c;即可构成精密全波整流电路。二极管的导通压降…

vlookup两个条件匹配_vlookup,你还是只会基础的单条件查找?

很多数据分析师在简历上都会说自己熟悉excel&#xff0c;但熟练使用excel必须要掌握的核心函数vlookup首当其冲&#xff0c;其次是sumifs、match、index等等。就算熟悉vlookup&#xff0c;很多人也只会基础的单条件查找&#xff0c;其实在工作中能用到vlookup的地方有很多&…

matlab 绘制符号函数,DAY8 MATLAB学习笔记—simulink入门、MATLAB符号函数的图形绘制...

如何打开simulink&#xff1a;启动simulink&#xff1a;先打开MATLAB软件界面第一步打开simulink第二步在command windows输入 simulink然后enter&#xff0c;等待有很多模块库第三步&#xff1a;常用的simulink库打开以后会看到simulink library browser这个界面最常用的就是s…

后盾网php多少钱_商标转让做公证花多少钱-购店网

当别人对您的商标感兴趣&#xff0c;或者您想买属于自己的商标时&#xff0c;转让商标是个好主意。但不了解商标转让流程的朋友&#xff0c;可能会担心自己对商标公证书的作用缺乏了解。所以今天我们给大家介绍一下什么是商标转让公证的用途&#xff0c;具体什么是商标公证。想…