如何在IBM MQ JMS接口上使用JMS属性?

ere*_*zul 5 jms properties ibm-mq

我正在使用MQ JMS接口和MQ 6.0.2.

似乎只有预先定义的属性被支持而不是任意属性.比如,我可以正常getJMSCorrelationID(),getJMSPriority()等等.但是,当我设置的发件人的任意属性:

message.setStringProperty("my arbitrary name", "value");
Run Code Online (Sandbox Code Playgroud)

我无法从接收器上的消息中获取属性:

message.getStringProperty("my arbitrary name");
Run Code Online (Sandbox Code Playgroud)

我得到了null.

有没有办法像在任何JMS实现中那样做,或者是MQ JMS限制?

T.R*_*Rob 2

根据JMS 1.1 规范

\n\n
\n

标识符是无限长度的字符序列,必须以 Java 标识符开始字符开头;以下所有字符必须是 Java 标识符部分字符。标识符起始字符是方法Character.isJavaIdentifierStart 返回true 的任何字符。这包括 \xe2\x80\x98_\xe2\x80\x99 和 \n \xe2\x80\x98$\xe2\x80\x99。标识符部分字符是方法Character.isJavaIdentifierPart 返回true 的任何字符。

\n
\n\n

遵循此处的线索,我们可以找到Character.isJavaIdentifierPart方法的 Javadoc ,该方法列出了标识符的有效字符:

\n\n
\n

如果满足以下任一条件,则字符可能是 Java 标识符的一部分:

\n\n
* it is a letter\n* it is a currency symbol (such as \'$\')\n* it is a connecting punctuation character (such as \'_\')\n* it is a digit\n* it is a numeric letter (such as a Roman numeral character)\n* it is a combining mark\n* it is a non-spacing mark\n* isIdentifierIgnorable(codePoint) returns true for the character\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

请注意,有效标识符字符集中特别排除了空格。有效的第一个字符集有一点限制,包括以下字符:

\n\n
\n
* isLetter(ch) returns true\n* getType(ch) returns LETTER_NUMBER\n* ch is a currency symbol (such as "$")\n* ch is a connecting punctuation character (such as "_").\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

使用有效的标识符并重试。例如:

\n\n

message.setStringProperty("my.arbitrary.name", "value");
\nmessage.getStringProperty("my.arbitrary.name");

\n\n

或者可能...

\n\n

message.setStringProperty("myArbitraryName", "value");
\nmessage.getStringProperty("myArbitraryName");

\n\n

顺便说一下,尽早切换到 V7。不仅对属性的支持总体上更好,而且直接读/写 MQMD 标头的能力也大大提高,如 IBM 示例所示

\n