gpt4 book ai didi

c++ - WMQ C++ 获取请求的消息 ID 并将其设置为回复的相关 ID

转载 作者:太空狗 更新时间:2023-10-29 20:57:31 24 4
gpt4 key购买 nike

我在获取消息 ID 并将其设置为回复的相关 ID 时遇到问题。

这是一段代码:

MQBYTE msgID;

request_msg.messageId().copyOut(msgID, MQ_MSG_ID_LENGTH, 0);
response_msg.setCorrelationId(msgID);

查看回复的相关id,相关id为0。

如何复制/获取请求的 messageId 并将其放在回复的相关 ID 上?

提前致谢。 :)

最佳答案

信息中心页面 Manipulating binary strings in C++将涉及的数据类型显示为 ImqBinaryMQBYTE24。正如 Shashi 在评论中指出的那样,MQBYTE 是一个单字节,不能包含 24 字节的消息 ID。上面链接的页面提供了一个引用示例:

#include <imqi.hpp> // C++ classes

ImqMessage message ;
ImqBinary id, correlationId ;
MQBYTE24 byteId ;

correlationId.set( byteId, sizeof( byteId ) ); // Set.
id = message.id( ); // Assign.
if ( correlationId == id ) { // Compare.
...

诊断此类问题的工具非常有用 SupportPac MA0W这是一个 API 导出。它可以向您显示 API 调用前后传递给 MQ 的结构的确切内容。通常看到的是预期的(在这种情况下,将 MQMD.MsgID 复制到 MQMD.CorrelID 并不是实际发生的情况。在这种情况下,我相信 MA0W 提供的跟踪会显示 msgID 已从应用程序准确传递到 MQ,但仅包含一个字符。

更新
OP 问:

Variable id is an ImqBinary and message is an ImqMessage object, from what I know id is not a member of ImqMessage like messageId, correlationId, groupId and etc. so how can message.id() passed it's value on id?

您认为 id 是类型为 ImqBinary 的已声明变量而不是 ImqMessage 类的成员是正确的。请参阅信息中心页面以获取 ImqBinary C++ class这解释了:

This class encapsulates a binary byte array that can be used for ImqMessage accounting token, correlation id, and message id values. It allows easy assignment, copying, and comparison.

ImqBinary 类的目的是提供一种变量类型来封装具有重载方法的字节数组,以便“正常”变量操作按预期工作。不是一次一个字节地复制字节数组,它可以是赋值中的 LVALRVAL。您可以使用 == 之类的比较运算符,而不是一次比较一个字节的数组。

因此,如果您的代码被修改为使用该示例,它可能看起来像这样:

#include <imqi.hpp> // C++ classes

ImqMessage request_msg, response_msg ;
ImqBinary id ;

id = request_msg.id( );
response_msg.setCorrelationId(id);

也就是说,我不确定您是否需要一个中间变量。您可以使用源消息中消息 ID 的 getter 调用的输出来分配相关 ID。像....

response_msg.setCorrelationId( request_msg.id( ) );

...可能会做到。我不再编写 C 或 C++ 代码,所以我可能弄错了语法,或者没有像编码时那样优雅,但你应该明白这一点。

关于c++ - WMQ C++ 获取请求的消息 ID 并将其设置为回复的相关 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491538/

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