gpt4 book ai didi

C# IBM MQ 客户端发送我自己的 messageId

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:31 25 4
gpt4 key购买 nike

我正在发送一条 MQ 消息,并按预期返回一个 messageID 和 correlationID,我可以使用 MQ 服务器返回的 messageID 从我发送的特定消息中捕获响应。

我将我的应用程序放入负载测试工具中,我发现在某些情况下队列管理器返回的 messageID 与前一条消息相同,在这些情况下,应用程序无法读取具有相同 messageID 的下一条消息.

我不是队列管理器的所有者,管理员的响应是“创建了您自己的消息 ID”。

我可以吗? messageID 是否需要有特定的格式?

这是我的代码:

            message = strInputMsg;
queueMessage = new MQMessage();
queueMessage.WriteString(message);
queueMessage.Format = MQC.MQFMT_STRING;
queueMessage.Expiry = timeOutExpiry;
queueMessage.ReplyToQueueName = QueueNameExpiry;
queuePutMessageOptions = new MQPutMessageOptions();
queuePutMessageOptions.Options = MQC.MQRO_COPY_MSG_ID_TO_CORREL_ID;
queue.Put(queueMessage, queuePutMessageOptions);
bytReturn = queueMessage.MessageId;

那么我可以在发送消息之前将 MessageID 属性设置为我自己的消息 ID 值吗,如下所示?

queueMessage.MessageId = myOwnMessageId

最佳答案

是的,代码可能会显式设置消息 ID,但您的代码似乎没有重用 MQMD 结构,这通常是这样发生的。如果负载测试工具多次重播相同的消息并在这样做时保留消息 ID,则更有可能基于您的描述和代码。

如果 MQ 被允许设置消息 ID,它保证它在它生成的 ID 的队列管理器中是唯一的。它不保证跨多个队列管理器的 GUID,但会尝试通过在消息 ID 中包含 QMgr 名称的 12 个字符来确保不会发生冲突。因此,尽管我们没有关于正在使用哪个负载测试工具以及它是否采用消息重放的信息,但这种可能性似乎比 MQ 有一个在执行 .Net MQMessage() 期间复制消息 ID 的错误更有可能 类构造函数。

请看:
MQMessage.NET class其中显示“使用默认消息描述符信息创建 MQMessage 对象...”当然,默认 MQMD 会导致 QMgr 生成消息 ID。

MQMD - MsgId (MQBYTE24)它在底部的注释中解释了如何使 MsgID 成为唯一的,以及在正文中如何通过放置消息的应用程序来控制它。

关于C# IBM MQ 客户端发送我自己的 messageId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40369767/

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