gpt4 book ai didi

java - 获取 header 属性的字节流 IBM MQ

转载 作者:行者123 更新时间:2023-12-02 09:36:37 29 4
gpt4 key购买 nike

我已使用 IBM MQ 从队列中获取消息。我得到了对象 MQMessage 并解析它。这样,我就有了消息正文的字节流,也有 MQMD 属性。那么,我怎样才能在字节数组中获取这个属性呢?

//Getting MQMessage
MQQueue queue = ...
MQMessage msg = new MQMessage();
queue.get(msg, options, size);

//For example this prop
String replyQueue = msg.replyToQueueName;

我需要它,因为在某些情况下,某些 Prop 无法使用默认的“UTF-8”编码正确读取,但它应该可以。因此,MQMessage.readFully(byte[] b) 只给我消息正文 byte[],我想获取消息头,例如 MQMD 和 RFH2。

最佳答案

所有 MQMD 属性都可以通过以下方式访问:

byte[] correlId = msg.correlationId;
byte[] msglId = msg.messageId;
String format = msg.format;
int expiry = msg.expiry;
String replyQueue = msg.replyToQueueName;

有两种方法处理 JMS(又名 MQRFH2)消息:

  • 将其作为具有命名属性的消息进行检索
  • 将其作为 MQRFH2 消息检索

要将 JMS 消息作为“具有命名属性的消息”获取,只需添加以下 MQGMO 选项:

gmo.options += CMQC.MQGMO_PROPERTIES_IN_HANDLE; 

然后您可以使用 getter 方法检索任何命名属性。即要检索名为 StackOverflow 的字符串属性,您可以执行以下操作:

String someValue = msg.getStringProperty("StackOverflow")

要将 JMS 消息作为 MQRFH2 检索,只需添加 MQGMO(这是默认设置):

gmo.options += CMQC.MQGMO_PROPERTIES_FORCE_MQRFH2;

然后您需要将消息传递给 MQRFH2 类并从那里开始:

msg.seek(0);
MQRFH2 rfh2 = new MQRFH2(msg);
String format = rfh2.getFormat();
String[] folderStrings = rfh2.getFolderStrings();
for (String folder : folderStrings)
System.out.println("Folder: "+folder);

关于java - 获取 header 属性的字节流 IBM MQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458190/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com