gpt4 book ai didi

java - 收到的 COD 的关联 ID 和正文为空

转载 作者:行者123 更新时间:2023-12-02 05:21:24 24 4
gpt4 key购买 nike

我们正在向 Websphere MQ 队列发送消息。发送消息时,我们设置 REPLY TO QUEUE NAME 和 JMSCorrelationID。我们还设置了用户标识符。代码片段如下。

Message  msg = session.createTextMessage((String) message);
Destination codeDestination = session.createQueue("queue://" + replyToQueueMgr + "/" + replyToQueueName);
msg.setJMSReplyTo(codeDestination);
msg.setIntProperty(JmsConstants.JMS_IBM_REPORT_COD, MQC.MQRO_COD);
msg.setJMSCorrelationID(msgCorrelId);
msg.setStringProperty(JmsConstants.JMS_IBM_MQMD_USERIDENTIFIER, "abc");
producer.send(msg);

请注意,我们已确保我们设置的所有字段都不为空。此外,用户 abc 也是有效用户,因为如果不是,则 COD 应进入死信队列,但其中没有消息。在消息被拾取之后,我们仍然得到一个 COD,其 JMSCorrelationID 为空。在COD处理器中,我们正在监听replyToQueuename。

String correlationID = (String)eventContext.getMessage().getInboundProperty("JMSCorrelationID");

检查以上相关 ID 为空。另外,消息负载是 mule 的 NullPayload 类的 {null_payload} 类型。我知道 body 将为 NULL,因为我们设置了 MQC.MQRO_COD。但我不明白correlationId是如何被消除的。

请告知Webview MQ端是否有任何配置可能导致这种行为?或者我们设置 header 属性的方式是否缺少某些内容?

更新

我们将带有 COD 信息的消息发送到的队列是 TOPIC 的别名。该主题有 2 个订阅者,我们观察到,在某些情况下,当两个订阅者都收到消息时,我们收到了多个 COD。有什么方法可以确保在所有订阅者都收到消息后,TOPIC 会发送单个 COD?此 QM 设置是否会导致 COD 为 null?

最佳答案

用户标识符

发布消息时,每个订阅者都会获得该消息的副本,其中包含唯一的消息 ID,并且 MQMD 中的身份上下文字段(UserID、AccountingToken、ApplIdentityData)均设置为订阅者的上下文。因此,无论您在发布的消息的 MQMD UserID 中设置什么,所有副本都将包含订阅者用户 ID。根据定义,该用户 ID 将存在于订阅者所在的位置,以便能够放置 COD。

与 Pub/Sub 的关联 ID

通过确保使用 MQSO_SET_CORREL_ID 进行订阅并将 MQSO SubCorrelId 设置为 MQCI_NONE,您可以确保将发布者的相关 ID 一直发送到订阅者。

一次 COD 处理多条消息

由于有多个独立消息,每个消息都设置了 COD 报告选项,因此您将收到多个报告消息。没有设置可以组合这些,但是如果您的主应用程序只需要一个,您可以编写一个中间应用程序来组合。

在报告消息中传回 Correl ID

默认情况下,报告选项将在报告消息的 Correl ID 中发回消息 ID。如果您希望传回 Correl ID,则应使用 MQRO_PASS_CORREL_ID。

进一步阅读

关于java - 收到的 COD 的关联 ID 和正文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484947/

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