如何在 JBoss 里配置 IBM MQ

如何在 JBoss 里配置 IBM MQ,第1张

安装WebSphere MQ资源适配器: 

从安装目录复制wmq.jmsra.rar文件到服务器的部署目录中,例如:<安装路径>/server/default/deploy。此时资源适配器将会自动选择服务器。

安装WebSphere MQ扩展事务客户端: 

WebSphere MQ扩展事务客户端允许你使用XA分布式事务,并用客户端模式连接到WebSphere MQ队列管理器。要将客户端安装在JBoss,需要从安装目录复制com.ibm.mqetclient.jar文件到服务器的lib目录中,例如<安装路径>/server/default/lib。

为你的应用程序配置资源适配器: 

WebSphere MQ资源适配器允许你定义一些全局的属性。在JBoss中JCA出站流的资源定义在-ds.xml文件,名为wmq.jmsra-ds.xml。

此文件的概要如下:

<?xml version="1.0" encoding="UTF-8"?>

<connection-factories>

<!-- mbeans defining JCA administered objects -->

<mbean/>

<!-- JCA Connection factory definitions -->

<tx-connection-factory/>

</connection-factories>

从上可以看出JCA连接工厂的定义在<tx-connection-factory>元素,而且JMS队列和主题被定义在JCA的管理对象mbean里面。

简单的两个队列-入站和出站的完整示例如下:

在JBoss启动脚本中占位符属性被定义为:

-Dchannel=MQTEST -DhostName=localhost -DqueueManager=TST_MGR

配置入站消息传递: 

消息传递配置在jboss.xml文件中,这个文件的内容会有所不同,但大致如下:

jboss.xml

必须指定目标类型和名称属性。其他属性都是可选的,如果省略,将使用其默认值。

一个简单的MDB定义入站消息如下所示:

[TOC]

Spring Boot作为简化Spring开发的框架,已经为我们集成了ActiveMQ和RabbitMQ。只需在Spring Boot配置几个MQ的连接方式即可开箱即用。大大简化了开发配置过程。

Spring的JavaConfig相比传统的XML的配置方式使得配置更加的可靠和方便。

本文将会说明如何用JavaConfig的方式将Spring与IBM WebSphere MQ(以下简称IBM MQ)集成配置,也可以作为其他MQ的配置参考。

17年后官方maven仓库以有相关依赖

IBM MQ相关的连接依赖包为 com.ibm.mq.allclient.jar ,该包不存在于公共Maven仓库,所以我们需要找到该依赖包并手动安装到我们本机的Maven仓库中。

该依赖包位于 [IBM MQ 安装路径]\java\lib 下,Windows下的默认安装路径为 C:\Program Files\IBM\WebSphere MQ\ ,Linux下的默认安装路径为 /opt/mqm/ 。可以将该包复制到开发机上。

通过以下命令安装该包到本地仓库

在Idea中可以按四次Shift键调出全局搜索框,键入Execute Maven Goal,等待搜索结果后按回车,即可执行Maven命令, 在此执行命令时不需要键入命令开头的 mvn

编辑项目pom.xml文件,添加以下三个依赖,分别为

配置Spring Boot配置文件,application.yml,此处用的是yaml格式配置文件,application.properties的配置方法可以参考Spring Boot的说明。

建立 JmsConfig 类,添加注解 @Configuration ,并将以上属性注入到此类。

在JmsConfig类添加以下方法。

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

不使用事务可以跳过该步骤。如需使用事务,可添加注解 @EnableTransactionManagement 到程序入口类中,事务的具体用法可参考Spring Trasaction。

JmsOperations为JmsTemplate的实现接口。

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

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

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

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

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

有问题请留言

amqsget 应用读完消息30秒后会结束

参考资料: https://www.ibm.com/support/knowledgecenter/zh/SSFKSJ_8.0.0/com.ibm.mq.pro.doc/q121700_.htm


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11673073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存