1

在 MQ 中,如果您有一个现有队列管理器的实例,请说您的应用程序有权访问的 queuemanager1。您可以通过 queuemanager1 创建一个指向另一个队列管理器 queuemanager2 的队列的队列来发送消息。这样做是因为应用程序可能无法直接访问 queuemanager2,但托管 queumanager1 的 MQ 服务器可以。

代码看起来像这样:

MQQueue destQueue = queuemanager1.accessQueue("queFromAnotherMngr",CMQC.MQOO_OUTPUT | CMQC.MQOO_FAIL_IF_QUIESCING,"queuemanager2", null, null);

我正在重构代码以将 IBM MQ JCA 适配器用于 JBoss AS 6。所以我相信我必须坚持使用 vanilla JMS api(使用 InitialContext JNDI 查找、生产者等)才能让我的连接由 JBoss 管理。

但是,我不知道如何在常规 JMS 中允许接收 MQ 服务器将我的消息转发到另一个队列管理器 (queuemanager2) 的另一个队列。

从我到目前为止的研究来看,有一个对象发送到 MQ,称为消息队列消息描述符 (MQMD),它有一个名为“ReplyToQMgr”和“ReplyToQ”的字段。我想如果我找到一种方法来使用带有 JCA 适配器的 JMS API 更新这些字段,我就有了我的解决方案。有什么想法吗?想法?建议?解决方案?谢谢!

4

1 回答 1

1

ReplyTo 字段允许远程应用程序将消息返回给您。WebSphere MQ 不使用它们来路由原始消息,而是用于处理确认和故障报告。

使用 JNDI 查找在远程 QMgr 上指定队列的方式是QMNAME在队列对象中定义字段。有关 WebSphere MQ 对象支持的所有属性的列表,请参阅JMS 对象的 WebSphere MQ 类的属性。上表中没有提到的是QMNAME队列的属性不需要与QMNAME连接工厂的属性相匹配。当这些属性不同时,本地 QMgr 将在队列对象打开时尝试解析到目标 QMgr 的路径。只要它可以找到路径(传输队列或 QMgr 别名必须与目标 QMgr 同名)并且只要您的应用程序被授权到传输队列,您就可以开始了。

请注意,如果您收到 JMS 异常,则必须查询是否存在并打印您找到的任何链接异常。这些将具有 WMQ 原因代码,它将告诉您或管理员是否有任何问题与名称解析、授权或其他有关。有关如何执行此操作的建议,请参阅JMS 的 WebSphere MQ 类中的异常。请注意,这不是 WMQ 特定的建议。JMS 指定了用于报告异常的多级结构,并且链接的异常是报告供应商特定错误的地方。因此,任何JMS 应用程序,无论使用哪个传输提供程序,都应该打印链接异常。

于 2012-02-29T21:40:43.230 回答