【问题标题】:How to create MQRFH2 Header with "Other" (not usr area) folder with JMS如何使用 JMS 使用“其他”(不是 usr 区域)文件夹创建 MQRFH2 标头
【发布时间】:2020-03-20 16:40:46
【问题描述】:

使用 Spring 的 JmsTemplate message.setStringProperty("param", "value") 可以设置 MQRFH2.usr 中的值。我们如何在MQRFH2.other 中设置值?

【问题讨论】:

  • 嗨 Priyank,你为什么要设置一个“其他”文件夹? MQ 将 JMS 用户属性安全地保存在“usr”中,这样​​当您在另一端有另一个 MQ-JMS 接收器时,它就会知道在哪里可以找到 JMS 用户属性。这个文件夹被称为“usr”的事实是任意的。重要的部分是,如果您发送 JMS 消息,它会完全一样(从 JMS 中查看)。

标签: jms ibm-mq spring-jms jmstemplate


【解决方案1】:

我不是 JMS 专家,但我知道如何使用常规 MQ/Java API 来做到这一点。

您使用 MQRFH2 类并使用 setFieldValue 方法:

rfh2.setFieldValue("other", "SomeText", "TEST");

我找不到我在 StackOverflow 上发布我的程序 MQTest71.java 的位置,但你可以在我的博客 here 上找到一篇文章。


2020 年 1 月 14 日更新:

今天下午,我使用了 MQ/Java 程序,这些程序在 MQRFH2 消息中创建了各种文件夹,然后运行 ​​MQ/JMS 程序来检索消息。 MQ/JMS 程序只是忽略 'mcd'、'jms' 和 'usr' 之外的所有文件夹。

因此,如果您希望 MQ/JMS 应用程序访问信息,则需要将名称/值属性放在“usr”文件夹中。

【讨论】:

  • 如果SomeText 位于other 文件夹而不是usr 文件夹中,MQ 是否能够将其作为标准消息属性进行查询?
  • 嗨@JoshMc,当然,但代码需要知道在哪里可以找到它。即String temp = rfh2.getStringFieldValue("other", "SomeText");
  • 因此队列管理器不会像在usr 中那样将其设为消息属性?
  • @JoshMc,没有。它将是文件夹“其他”中的消息属性。您可以为 MQRFH2(又名 JMS)消息创建自己的文件夹,它们可以包含任意数量的消息属性。
  • 感谢罗杰的更新。消息中是否仍然存在其他文件夹,或者是 MQ 队列管理器在内部使用 RFH2 标头并复制它时忽略这些文件夹而不将它们发送回?
【解决方案2】:

根据 MQ 9.1.x>Reference>Developing applications reference>MQI applications reference>Properties specified as MQRFH2 elements>Supported MQRFH2 folders 没有other 文件夹。

<jms><mcd><mqext><usr> 文件夹在 The MQRFH2 header and JMS 中进行了描述。 <usr> 文件夹用于传输与消息关联的任何 JMS 应用程序定义的属性。 <usr> 文件夹中不允许组。

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2011-10-11
    • 1970-01-01
    • 2016-11-09
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多