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;举个例…

java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

byte&#xff1a;Java中最小的数据类型&#xff0c;在内存中占8位(bit)&#xff0c;即1个字节&#xff0c;取值范围-128~127&#xff0c;默认值0short&#xff1a;短整型&#xff0c;在内存中占16位&#xff0c;即2个字节&#xff0c;取值范围-32768~32717&#xff0c;默认值0i…

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

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

java容器怎么封装的_docker怎么把容器打包成镜像

1.首先引用 maven docker插件&#xff0c;打开 java应用jar包&#xff0c;点击package按钮&#xff1b;2.新建一个docker文件夹&#xff0c;将导出的jar包放入到此文件夹中&#xff1b;3.新建一个Dockerfile文件&#xff0c;输入以下打包命令FROM frolvlad/alpine-oraclejdk8:s…

python 异常回溯_关于python:在循环中捕获异常回溯,然后在脚本末尾引发错误...

我正在尝试捕获所有异常错误&#xff0c;然后在脚本结尾处使其引发/显示所有回溯...我有一个主脚本&#xff0c;例如调用我的下标&#xff1a;errors open(MISC/ERROR(S).txt, a)try:execfile("SUBSCRIPTS/Test1.py", {})except Exception:## Spread over two calls…

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

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

mysql having in_MySQL中无GROUPBY直接HAVING的问题

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/having_without_groupby_in_mysql.html 今天有同学给我反应&#xff0c;有一张表&#xff0c;id是主键&#xff0c;这样的写法可…

python求线段长度_python微元法计算函数曲线长度的方法

计算曲线长度&#xff0c;根据线积分公式&#xff1a;&#xff0c;令积分函数f(x,y,z) 为1&#xff0c;即计算曲线的长度&#xff0c;将其微元化&#xff1a;其中根据此时便可在python编程实现&#xff0c;给出4个例子&#xff0c;代码中已有详细注释&#xff0c;不再赘述计算曲…

java if 顺序 括号_03-03 java 顺序语句结构,选择结构if语句

/*if语句的格式3&#xff1a;if(比较表达式1) {语句体1;}else if(比较表达式2) {语句体2;}else if(比较表达式3) {语句体3;}...else {语句体n1;}执行流程&#xff1a;首先计算比较表达式1看其返回值是true还是false&#xff0c;如果是true&#xff0c;就执行语句体1&#xff0c…

java 项目部署_java项目部署

本文章只为帮助大家学习项目的发布&#xff0c;为基础篇&#xff0c;在此给大家示范在window环境下的项目部署及运维。以下版本为讲解示例&#xff0c;可自行改至匹配版本。服务器&#xff1a;window service2008 R2 Standard(提前准备好服务器&#xff0c;可以在服务器商家租服…

电气专业学python吗_985大学毕业起薪最高的五个专业,计算机、金融、电气上榜!...

本科毕业生起薪是指本科毕业生第一份工作能够获得的薪资水平&#xff0c;大学毕业生的起薪一般会因为学校、专业、地区的不同而有所差异。一般来说&#xff0c;985大学毕业生的起薪要比普通大学毕业生的起薪高一点&#xff0c;那么&#xff0c;985大学中&#xff0c;哪些专业的…

python核心教程_python核心教程--第四章

第四章讲的是python对象。4.1 python对象所有的python对象都拥有三个特性&#xff1a;身份&#xff0c;类型和值身份&#xff1a;每一个对象都有一个唯一的身份标识自己&#xff0c;任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。类型&#…

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

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

java file 字符串_Java读取一个文本文件拼接成一个字符串(readFileToString)

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import org.junit.Test;public class Demo {// 使用示例Testpublic void testName1() throws Exception {String filePath …

pythonselenium上传图片视频_如何用selenium、python上传文件(图片)

我添加了一个答案&#xff0c;任何人想使用处理恼人的msofiledialogs。这是对saravanan提出的解决方案的改进&#xff0c;但对Python来说更加充实。我也遇到过类似的问题&#xff0c;我正在为一家公司做脚本。我试图为一家公司的客户上传文件&#xff0c;但由于他们的网站工作方…

java中的.运算符_java中的各种运算符

1、算术运算符&#xff1b;算术运算符也就是我们小学所学过的&#xff1a; - */&#xff1b;还有取模运算符&#xff1a;%&#xff1b;取模运算符也就是求余的运算&#xff1b;运算形式&#xff1a;操作数 操作数&#xff1b;操作数 - 操作数&#xff1b;操作数 *操作数&#…

python curl 获取返回值_python获取系统命令的返回值 | curl in python

项目背景&#xff1a;通过curl 命令 从服务器获取数组&#xff0c;tids&#xff0c;然后导入到Mysql 表中。自己想的方案&#xff1a;shell命令不熟悉&#xff0c;另外python中的数据库等接口都已封装&#xff0c;所以想使用Python来做&#xff0c;利用Python调用shell命令。cu…

java 绑定属性_Java的动态绑定

看这段代码Father father new Son();父类引用指向子类对象&#xff0c;这是java的多态特性&#xff0c;有多态引到动态绑定&#xff0c;如何引入呢&#xff0c;看这个代码&#xff1a;classFather{privateString nameString;public voidspeak() {System.out.println(this.getC…