31.6. 部署 IBM MQ 资源适配器
关于 IBM MQ
IBM MQ 是来自 IBM 的消息传递导向型中间件(MOM)产品,允许分布式系统上的应用程序相互通信。这通过使用消息和消息队列来完成。IBM MQ 负责发送消息到消息队列,以及使用消息通道将数据传输到其他队列管理器。有关 IBM MQ 的更多信息,请参阅 IBM 产品网站上的 IBM MQ。
概述
IBM MQ 可以配置为 JBoss EAP 7.3 的外部 JMS 提供程序。本节介绍在 JBoss EAP 中部署和配置 IBM MQ 资源适配器的步骤。此部署和配置可使用管理 CLI 工具或基于 Web 的管理控制台来完成。有关 IBM MQ 支持配置的最新信息,请参阅 JBoss EAP 支持的配置。
您必须在配置 IBM MQ 资源适配器后重启您的系统,使配置更改生效。
先决条件
开始之前,您必须验证 IBM MQ 资源适配器的版本并了解其配置属性。
-
IBM MQ 资源适配器作为名为
wmq.jmsra.rar的 Resource Archive(RAR)文件提供。您可以从/opt/文件。如需有关每个 JBoss EAP 版本支持的特定版本的信息,请参阅 JBoss EAP 支持的配置。mqm/java/lib/jca/wmq.jmsra.rar 获取 wmq.jmsra.rar 您必须知道以下 IBM MQ 配置值:有关这些值的详情,请参阅 IBM MQ 产品文档。
- MQ_QUEUE_MANAGER :IBM MQ 队列管理器的名称
- MQ_HOST_NAME :用于连接到 IBM MQ 队列管理器的主机名
- MQ_CHANNEL_NAME :用于连接到 IBM MQ 队列管理器的服务器频道
- MQ_QUEUE_NAME :目标队列的名称
- MQ_TOPIC_NAME :目标主题的名称
- MQ_PORT :用于连接到 IBM MQ 队列管理器的端口
- MQ_CLIENT :传输类型
对于出站连接,还必须熟悉以下配置值:
- MQ_CONNECTIONFACTORY_NAME :提供与远程系统连接的连接工厂实例的名称
流程
以下是 IBM 提供的默认配置,可能随时更改。如需更多信息,请参阅 IBM MQ 文档。
-
首先,通过将
wmq.jmsra.rar文件复制到EAP_HOME/standalone/deployments/目录中来手动部署资源适配器。 接下来,使用管理 CLI 添加资源适配器并进行配置。
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=XATransaction)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=XATransaction)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
transaction-support元素被设置为XATransaction。在使用事务时,请务必提供 XA 恢复数据源的安全域,如下例所示。/subsystem=resource-adapters/resource-adapter=test/connection-definitions=test:write-attribute(name=recovery-security-domain,value=myDomain)
/subsystem=resource-adapters/resource-adapter=test/connection-definitions=test:write-attribute(name=recovery-security-domain,value=myDomain)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 XA 恢复的更多信息,请参阅 JBoss EAP 配置指南中的配置 XA 恢复。
对于非事务部署,将
事务支持的值更改为NoTransaction。/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=NoTransaction)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=NoTransaction)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在创建了资源适配器,您可以在其中添加必要的配置元素。
为队列添加一个
admin-object,并配置其属性。/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao:add(class-name=com.ibm.mq.connector.outbound.MQQueueProxy, jndi-name=java:jboss/MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueName:add(value=MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueManagerName:add(value=MQ_QUEUE_MANAGER)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao:add(class-name=com.ibm.mq.connector.outbound.MQQueueProxy, jndi-name=java:jboss/MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueName:add(value=MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueManagerName:add(value=MQ_QUEUE_MANAGER)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为主题添加一个
admin-object,并配置其属性。/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao:add(class-name=com.ibm.mq.connector.outbound.MQTopicProxy, jndi-name=java:jboss/MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=baseTopicName:add(value=MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=brokerPubQueueManager:add(value=MQ_QUEUE_MANAGER)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao:add(class-name=com.ibm.mq.connector.outbound.MQTopicProxy, jndi-name=java:jboss/MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=baseTopicName:add(value=MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=brokerPubQueueManager:add(value=MQ_QUEUE_MANAGER)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为受管连接工厂添加连接定义,并配置其属性。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果要将 JBoss EAP 中 EJB3 消息传递系统的默认提供程序从 JBoss EAP 7 消息传递更改为 IBM MQ,请使用管理 CLI 来修改
ejb3子系统,如下所示:/subsystem=ejb3:write-attribute(name=default-resource-adapter-name,value=wmq.jmsra.rar)
/subsystem=ejb3:write-attribute(name=default-resource-adapter-name,value=wmq.jmsra.rar)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 MDB 代码
中配置 @ActivationConfigProperty和@ResourceAdapter注释,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 务必将
@ResourceAdapter值中的 VERSION 替换为 RAR 名称中的实际版本。激活资源适配器:
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:activate()
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:activate()Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31.6.1. IBM MQ 资源适配器的限制和已知问题 复制链接链接已复制到粘贴板!
下表列出了 IBM MQ 资源适配器的已知问题。version 列中的复选标记(Auditor)表示该资源适配器版本存在问题。
| JIRA | 问题描述 | IBM MQ 8 | IBM MQ 9 |
|---|---|---|---|
|
IBM MQ 资源适配器返回 | ✔ | ✔ | |
| 以下限制适用于 IBM MQ 的消息属性名称。
请参阅 IBM MQ、版本 8.0 和属性名称限制(IBM MQ)、IBM 知识库网站上版本 9.0 的限制,以了解每个资源适配器的消息属性名称限制的完整列表。 | ✔ | ✔ | |
|
在使用 @ActivationConfigProperty(propertyName = "destination", propertyValue = "QUEUE")
| ✔ | ✔ | |
|
如果使用 IBM MQ 资源适配器,以使用 | ✔ | ✔ | |
|
IBM MQ 资源适配器可以在连接开始前从队列和主题读取消息。这意味着使用者可以在连接启动之前使用消息。要避免出现这个问题,请使用 | ✔ | ✔ | |
|
旦设置了
在下面的代码示例中,@ @Inject
@JMSConnectionFactory("jms/CF")
@JMSPasswordCredential(userName="myusername", password="mypassword")
@JMSSessionMode(JMSContext.DUPS_OK_ACKNOWLEDGE)
transient JMSContext context3;
| ✔ | ✔ | |
|
根据 JMS 规范,Queue | ✔ | ✔ | |
|
| ✔ | ✔ | |
|
| ✔ | ✔ | |
|
在使用无效凭证时,IBM MQ 资源适配器抛出 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.PoolByCri] (EJB default - 7) IJ000604: Throwable while attempting to get a new connection: null: com.ibm.mq.connector.DetailedResourceException: MQJCA1011: Failed to allocate a JMS connection., error code: MQJCA1011 An internal error caused an attempt to allocate a connection to fail. See the linked exception for details of the failure.
以下是可能导致此问题的代码示例: QueueConnection qc = queueConnectionFactory.createQueueConnection("invalidUserName", "invalidPassword");
| ✔ | ✔ | |
|
由于 SVR-ERROR: Expected JMSException, received com.ibm.mq.connector.outbound.MQQueueProxy cannot be cast to com.ibm.mq.jms.MQDestination
这是因为队列或主题查找中使用的 JNDI 名称为 | ✔ | ✔ | |
|
| ✔ | ✔ | |
|
如果在 | ✔ | ✔ | |
|
如果您关闭了连接,然后立即创建具有相同 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /jmsServlet-1.0-SNAPSHOT/: com.ibm.msg.client.jms.DetailedJMSRuntimeException: MQJCA0002: An exception occurred in the IBM MQ layer. See the linked exception for details. A call to IBM MQ classes for Java(tm) caused an exception to be thrown.
当与同一 | ✔ | ✔ | |
| 如果有状态会话 Bean 尝试在容器管理事务(CMT)中同时发送消息到主题,则发送的消息会失败并显示以下消息: SVR-ERROR: com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ2007: Failed to send a message to destination 'MDB_NAME TOPIC_NAME'
堆栈追踪显示它是由以下异常导致的: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2072' ('MQRC_SYNCPOINT_NOT_AVAILABLE')
| ✔ | ✔ | |
|
当您在 JBoss EAP 上部署 IBM MQ v9.0.0.4 资源适配器 WARN [org.jboss.as.connector.deployers.RADeployer] (MSC service thread 1-8) IJ020017: Invalid archive: file:/<path-to-jboss>/jboss-eap-7.3/standalone/tmp/vfs/temp/tempa02bdd5ee254e590/content-135e13d4f38704fc/contents/
IBM MQ v9.0.0.4 资源适配器已作为 JBoss EAP 7.3 的 Jakarta 消息传递提供商测试的一部分进行测试。您可以选择忽略此警告消息,或者您可以通过将 /subsystem=jca/archive-validation=archive-validation:write-attribute(name=enabled, value=false)
| ✔ | ✔ |