当前位置: 首页 > news >正文

SpringBoot 集成 JMS 与 IBMMQ 代码示例教程

文章目录

  • 前言
  • 一、集成 JMS 与 IBMMQ
    • 1、pom 依赖
    • 2、yml 配置
    • 3、Properties 配置类
    • 4、Factory 连接工厂类
    • 5、配置连接认证
    • 6、配置缓存连接工厂
    • 7、配置事务管理器
    • 8、配置JMS模板
    • 9、消息发送与接收
  • 总结


前言

SpringBoot 集成 IBMMQ,实现两个服务间的消息通信。


一、集成 JMS 与 IBMMQ

1、pom 依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId>
</dependency><dependency><groupId>javax.jms</groupId><artifactId>javax.jms-api</artifactId><version>2.0.1</version>
</dependency><dependency><groupId>com.ibm.mq</groupId><artifactId>com.ibm.mq.allclient</artifactId><version>9.1.1.0</version>
</dependency>

2、yml 配置

project:  mq:host: 192.168.1.180				# 服务地址port: 1416						# 服务端口queue-manager: queueManager		# 队列管理器username: username				# 用户名password: password				# 密码channel: channel     			# 连接通道receive-timeout: 2000     		# 连接超时

3、Properties 配置类

@Data
@Configuration
@ConfigurationProperties(prefix = "project.mq")
public class JmsConfig {/*** 服务地址*/private String host;/*** 服务端口*/private Integer port;/*** 队列管理器*/private String queueManager;/*** 用户名*/private String username;/*** 密码*/private String password;/*** 连接通道*/private String channel;/*** 连接超时*/private long receiveTimeout;
}

4、Factory 连接工厂类

@Bean
public MQQueueConnectionFactory mqQueueConnectionFactory() {MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();mqQueueConnectionFactory.setHostName(host);try {mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);mqQueueConnectionFactory.setCCSID(1208);mqQueueConnectionFactory.setChannel(channel);mqQueueConnectionFactory.setPort(port);mqQueueConnectionFactory.setQueueManager(queueManager);} catch (Exception e) {e.printStackTrace();}return mqQueueConnectionFactory;
}

CCSID要与连接到的队列管理器一致,Windows下默认为1381,Linux下默认为1208。1208表示UTF-8字符集,建议把队列管理器的CCSID改为1208。

5、配置连接认证

@Bean
UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter(MQQueueConnectionFactory mqQueueConnectionFactory) {UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();userCredentialsConnectionFactoryAdapter.setUsername(username);userCredentialsConnectionFactoryAdapter.setPassword(password);userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory);return userCredentialsConnectionFactoryAdapter;
}

如不需要账户密码链接可以跳过此步,直接将mqQueueConnectionFactory注入下一步的缓存连接工厂。

6、配置缓存连接工厂

@Bean
@Primary
public CachingConnectionFactory cachingConnectionFactory(UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) {CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter);cachingConnectionFactory.setSessionCacheSize(500);cachingConnectionFactory.setReconnectOnException(true);return cachingConnectionFactory;
}

不配置该类则每次与MQ交互都需要重新创建连接,大幅降低速度。

7、配置事务管理器

@Bean
public PlatformTransactionManager jmsTransactionManager(CachingConnectionFactory cachingConnectionFactory) {JmsTransactionManager jmsTransactionManager = new JmsTransactionManager();jmsTransactionManager.setConnectionFactory(cachingConnectionFactory);return jmsTransactionManager;
}

8、配置JMS模板

@Bean
public JmsOperations jmsOperations(CachingConnectionFactory cachingConnectionFactory) {JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);jmsTemplate.setReceiveTimeout(receiveTimeout);return jmsTemplate;
}

JmsOperations为JmsTemplate的实现接口。

重要:不设置setReceiveTimeout时,当队列为空,从队列中取出消息的方法将会一直挂起直到队列内有消息

9、消息发送与接收

  1. 发送消息

可直接使用jmsOperations的convertAndSend(String, Object)方法,第一个参数为队列名称,第二个参数为需发送的对象。

重要:发送的对象需实现序列化接口

@Autowired
JmsOperations jmsOperations;public void send(User user){jmsOperations.convertAndSend("QUEUE.USER", user);
}
  1. 接收消息

可直接使用jmsOperations的receiveAndConvert(String)方法,第一个参数为队列名称。

@Autowired
JmsOperations jmsOperations;public void receive(User user){jmsOperations.receiveAndConvert("QUEUE.USER");
}
  1. 开启事务

如需使用事务,只需在方法添加注解@Transactional(value = “jmsTransactionManager”)即可。


总结

使用 SpringBoot JMS 集成 IBMMQ 十分的方便。

相关文章:

SpringBoot 集成 JMS 与 IBMMQ 代码示例教程

文章目录 前言一、集成 JMS 与 IBMMQ1、pom 依赖2、yml 配置3、Properties 配置类4、Factory 连接工厂类5、配置连接认证6、配置缓存连接工厂7、配置事务管理器8、配置JMS模板9、消息发送与接收 总结 前言 SpringBoot 集成 IBMMQ&#xff0c;实现两个服务间的消息通信。 一、集…...

大模型之Prompt研究和技巧

大模型之Prompt研究和技巧 大模型之Prompt编写简介组成技术Zero-ShotFew-shotCOTCOT-SCTOTGoTReAct 大模型之Prompt编写 简介 Prompt是是给 AI **模型的指令&#xff0c;**一个简短的文本输入&#xff0c;用于引导AI模型生成特定的回答或执行特定任务。 Prompt是你与语言模型沟…...

掌握Golang匿名函数

一个全面的指南&#xff0c;以理解和使用Golang中的匿名函数 Golang以其简单和高效而闻名&#xff0c;赋予开发人员各种编程范式。其中一项增强代码模块化和灵活性的功能就是匿名函数。在这篇正式的博客文章中&#xff0c;我们将踏上探索Golang匿名函数深度的旅程。通过真实世…...

HarmonyOS云开发基础认证---练习题二

【判断题】 2/2 Serverless是云计算下一代的默认计算范式。 正确(True) 【判断题】 2/2 接入认证服务后&#xff0c;用户每次收到验证码短信都需要开发者买单。 错误(False) 【判断题】 2/2 认证服务手机号码登录需要填写国家码。 正确(True) 【判断题】 2/2 在Cloud Functi…...

ffmpeg视频解码器的配置选项含义

lowres的含义 lowres是AVCodecContext结构体中的一个成员变量&#xff0c;用于指定编解码器的降低分辨率级别。 在某些情况下&#xff0c;为了加快编解码的速度或减少计算资源的消耗&#xff0c;可以通过设置lowres参数来降低编解码器的分辨率级别。这将导致编解码器在处理视…...

enter ubuntu boot option in virt-manager

在全屏模型下&#xff0c;启动过程中按下F8或者Ctrl F8。 参考&#xff1a;https://serverfault.com/questions/463024/how-do-i-access-the-f8-bootmenu-while-booting-a-windows-2008r2-kvm-guest-vm...

电商运营该如何做 AB 测试

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近年&#xff0c;电商行业进入了一个新的发展阶段&#xff0c;一方面电商市场规模持续扩大&#xff0c;另一方面直播电商、即时零售、社区团购等新兴电商业态在疫情…...

go环境部署

#env 命令查看 PATH 发现 #这两条环境变量是把 通过brew 安装的所有程序加入到环境变量中,其中就包含了go /opt/homebrew/sbin /opt/homebrew/bin#mac 系统 将原本 brew 安装的 go 1.20.5版本卸载 brew uninstall go #然后 去官网下载 https://go.dev/dl/ 想要的版本 1.21.0 …...

HTTP/2 中的漏洞

另一个热门漏洞是 CVE-2023-44487。 该漏洞与 HTTP/2 协议实施中的一个缺陷有关&#xff0c;可用于实施 DDoS 攻击。使用该漏洞的攻击被命名为 HTTP/2 快速重置。 为什么它很危险 要利用该漏洞&#xff0c;攻击者需要在 HTTP/2 会话中打开大量请求&#xff0c;然后在不等待服…...

智能油烟机 优化烹饪体验

如果说空调是夏天最伟大的发明&#xff0c;那么油烟机则是健康厨房的伟大推进者。随着科技的发展&#xff0c;智能化的油烟机逐渐走进了人们的日常生活。每当我们在爆炒、油炸食物的时候&#xff0c;油烟总能呛得人眼睛痛、鼻子难受&#xff0c;传统的油烟机面前我们还需要手动…...

啥?PS一秒成图?Adobe的逆天黑科技大公开

在日前举行的 Adobe MAX 创意大会上&#xff0c;Adobe Adobe Firefly Image 2&#xff08;萤火虫二代成像模型&#xff09;、Firefly Vector Model&#xff08;萤火虫矢量模型&#xff09;和Firefly Design Model&#xff08;萤火虫设计模型&#xff09;。 Firefly矢量模型是世…...

扫描器(xray和bp联动)

文章目录 分类主动扫描和被动扫描bp与xray联动 分类 扫描器分为对web的扫描器和对主机的扫描器 主动扫描和被动扫描 主动扫描&#xff1a; 输入某个URL&#xff0c;然后由扫描器中的爬虫模块爬取所有链接&#xff0c;对GET、POST等请求进行参数变形和污染&#xff0c;进行重放测…...

[C++]:1.初识C++和C语言缺陷补充。

初识C和C语言缺陷补充 一.主要内容&#xff1a;二.具体内容&#xff1a;一&#xff1a; 作用域1.命名空间&#xff1a;2.函数声明和定义&#xff1a;3.不存在命名冲突的情况&#xff1a; 二.输入输出&#xff1a;1.基本输入输出&#xff1a;2.关于std的展开&#xff1a; 三.函数…...

BUUCTF学习(三): PHP 代码审计

1、介绍 2、解题 (1)查看网页源代码 (2)返回链接 (3)代码审计...

推荐《Blue prison》

电视动画片《蓝色监狱》改编自金城宗幸原作、野村优介作画的同名漫画作品&#xff0c;于2021年7月31日宣布电视动画化的消息 [1]。该片由8Bit负责动画制作&#xff0c;于2022年10月9日起播出 [2]&#xff0c;全24集。 该作评为Anime Corner 2022年年度体育动画 [24]&#xff0…...

goland安装教程

安装版本&#xff1a; goland-2023.2.3.exe...

java中okhttp和httpclient那个效率高

在比较OkHttp和HttpClient的效率时&#xff0c;需要考虑多个因素&#xff0c;包括性能、吞吐量、资源消耗等。这些因素往往取决于具体的使用场景和需求。 OkHttp是一个由Square开发的现代化HTTP客户端库&#xff0c;它在Android平台上广泛使用&#xff0c;并且也可以在Java应用…...

内存占用问题

虚拟内存介绍 虚拟内存就是将部分磁盘变成内存的拓展&#xff0c;用上去就好像是将内存变大了一样。 比如同样是16G的物理内存&#xff0c;有人能比你多开几个应用&#xff0c;你开两三个就要黑屏&#xff0c;然后浏览器说你内存不够。 打开任务管理器&#xff0c;内存也没有…...

代码随想录二刷 Day 34

455.分发饼干 这个题差不多是两个for循环遍历&#xff0c;然后用双指针法化简&#xff0c;自己可以大概写出来&#xff0c;漏了一个边界条件 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end(…...

软件开源快速开发框架:降本增效,助力流程化办公!

随着时代的进步和社会的发展&#xff0c;应用软件开源快速开发框架的优势特点&#xff0c;可以让不少客户朋友顺利实现流程化办公&#xff0c;朝着数字化方向迈进。流辰信息是专业研发低代码技术平台的服务商&#xff0c;一直在低代码平台领域深耕细作&#xff0c;努力钻研&…...

Flink on k8s容器日志生成原理及与Yarn部署时的日志生成模式对比

Flink on k8s部署日志详解及与Yarn部署时的日志生成模式对比 最近需要将flink由原先部署到Yarn集群切换到kubernetes集群&#xff0c;在切换之后需要熟悉flink on k8s的运行模式。在使用过程中针对日志模块发现&#xff0c;在k8s的容器中&#xff0c;flink的系统日志只有jobma…...

AD20绘制电路板的外形

今天学习了绘制电路板外形的方法&#xff0c;记录一下&#xff0c;回头忘了还能在看看&#xff0c;便能很快的回忆起来了&#xff0c;比看视频啥的要高效的多。毕竟是自己写的&#xff0c;印象要深刻的多。 首先新建一个PCBDoc文件&#xff0c;方法如下图&#xff1a; 在新建的…...

linux 设置开机启动

1、Fedora 20系列操作系统 touch /etc/rc.d/rc.local chmod x /etc/rc.d/rc.local vi /etc/rc.d/rc.local 按“i”进入编辑模式&#xff0c;在文件末尾补充如下内容&#xff1a; 可以根据需要添加你要开机自启动的脚本命令&#xff08;下面是举例&#xff09;&#xff1a; …...

IDEA实现远程Debug调试

一、 前提   需要准备JDK1.8环境&#xff0c;安装IDEA(版本不限) 二、 IDEA中如何实现远程Debug模式 (1)、创建demo项目 1.File一>New一>project… 2.Maven Archetype一>填写Name一>选择jdk1.8一>选择Web一>创建 (2)、配置Idea 找到Remote Jvm Debug java…...

SpringBoot项目入门: IDEA 创建SpringBoot项目

方式1:在线创建项目 https://start.spring.io/ 环境准备 &#xff08;1&#xff09;JDK 环境必须是 1.8 及以上&#xff0c;传送门&#xff1a;jdk1.8.191 下载&#xff08;2&#xff09;后面要使用到 Maven 管理工具 3.2.5 及以上版本&#xff08;3&#xff09;开发工具建议…...

Vue2+SpringBoot实现数据导出到csv文件并下载

前言 该功能用于导出数据到csv文件&#xff0c;并且前端进行下载操作。涉及到java后端以及前端。后端获取数据并处理&#xff0c;前端获取返回流并进行下载操作。csv与excel文件不大相同。如果对导出的数据操作没有很高要求的话&#xff0c;csv文件就够了。具体差异自行百度。我…...

NewStarCTF2023week2-base!(base低位隐写)

附件内容是很多的base64编码的字符串 常见的Base64隐写一般会给一个txt文本文档&#xff0c;内含多个经过base64编码的字符串。解码规则是将所有被修改过的base64字符串结尾的二进制值提取出来组成一个二进制串&#xff0c;以8位分割并转为十进制值&#xff0c;最终十进制对应的…...

众和策略:国际油价走高,石油板块强势拉升,通源石油、和顺石油等涨停

石油板块16日盘中大幅拉升&#xff0c;到发稿&#xff0c;通源石油、和顺石油、贝肯动力、中曼石油、泰山石油、仁智股份等涨停&#xff0c;潜能恒信、博迈科涨约8%。 燃气板块亦上扬&#xff0c;到发稿&#xff0c;洪通燃气、美能动力涨约5%&#xff0c;新疆火炬、九丰动力涨…...

C++笔记之获取线程ID以及线程ID的用处

C笔记之获取线程ID以及线程ID的用处 code review! 文章目录 C笔记之获取线程ID以及线程ID的用处一.获取ID二.线程ID的用处2.1.线程池管理2.2.动态资源分配2.3.使用线程同步机制实现互斥访问共享资源2.4.使用线程 ID 辅助线程同步2.5.任务分发&#xff1a;线程ID可以用于将任务…...

机器人硬件在环仿真:解决实体开发与测试挑战,提升效率与安全性

工业机器人具备出色的灵活性和运动能力&#xff0c;广泛应用于工业制造领域。它们可以完成装配、焊接、喷涂、搬运、加工、品质检测等任务&#xff0c;提高了生产效率&#xff0c;保证了产品质量。此外&#xff0c;在医疗领域也有辅助手术等特殊应用&#xff0c;展现了其在多个…...

专业做网站公司哪家好/怎么注册一个自己的网址

系统管理与维护任务书2011-2012学年第一学期电信学院计算机系课程设计总结课设名称 系统管理与维护 课设日期 17-18周 指导老师 班 级 学 号 姓 名 课程设计任务书指导教师姓名所在系计算机系课程名称系统管理与维护学时2周设计目的、任务和要求设计目的通过本次教学实践活动&a…...

怎么注册个人的网站/百度指数官网入口

from datetime import datetime, datenow_date 2021-6-24 15:23:29.000227 nowdate now_date.strftime(now_date,"%m/%d/%Y") 想从字符串表示的时刻中仅获取“年/月/日”&#xff0c;但运行以上代码会报错str object has no attribute strftime。 改进方法如下&am…...

莱芜金点子信息港房产/seo和sem的区别

一、前言 在阅读这篇博文前&#xff0c;请先了解《如何快速搭建一个简易的ELK日志分析系统》一文&#xff0c;在这篇博文中我们可以了解学习到EKL系统的搭建&#xff0c;同时实现了读取一个固定日志文件中的内容&#xff0c;并进行分析的示例。   在本文中&#xff0c;我们通…...

教育技术专业网站开发课程/各种资源都有的搜索引擎

http://blog.csdn.net/xyz_lmn/article/category/912146...

松江做网站费用/微博seo营销

验证码的识别可以说是一个非常困难的问题&#xff0c;更何况现在有一些验证码让人来辨认都有些不容易&#xff0c;当然正如我标题里说的&#xff0c;我这里讨论的是一种简单的验证码&#xff0c;具体来说就是经过旋转、缩放之后再加上一些随机线条作为干扰而得到的图片&#xf…...

wordpress 405/百度高级搜索页面

滤波器的基础是谐振电路&#xff0c;只要能构成谐振的电路组合就可以实现滤波器。滤波器有四个基本原型&#xff0c;低通、带通、带阻、高通。实现滤波器就是实现相应的谐振系统。纪总参数就是电感、电容&#xff0c;分布参数就是各种射频/微波传输线形成的谐振器。理论上&…...