gpt4 book ai didi

.net - MQMessage 探索(使用 WebSphere MQ .NET API)

转载 作者:行者123 更新时间:2023-12-04 06:39:03 30 4
gpt4 key购买 nike

我真的是 WebSphere MQ 的新手,但我有一个关于 MQMessage API 的问题。
看来MQMessage的接收者应该提前知道:

  • 写入的消息类型(如果 WriteInt 然后 ReadInt 等。)
  • 属性名称和类型(如果 SetBooleanProperty(Name) 然后 GetBooleanProperty(Name))

    这对我来说毫无意义。因为如果我不熟悉消息结构,我是否应该探索所有选项,直到检索到其中的数据?

    帮助将不胜感激,
    盖伊
  • 最佳答案

    是的,您完全正确,如果消息是固定长度记录格式等结构化数据,则必须事先知道消息的格式才能对其进行解析。另一方面,如果消息有效负载是标记的数据结构(例如有效的 XML),那么您将使用正常解析来访问它。例如,您可能在不知道确切结构的情况下使用 XPath 访问 XML 有效负载。

    您提到的方法(WriteInt、ReadInt 等)通常用于从已知格式中提取数据并将缓冲区指针前进到下一个字段。但是,也有读取和写入 UTF 字符串的方法。如果由于某种原因您的应用程序必须处理多种消息类型,那么您可以通过查询消息描述符来查询消息格式和消息类型。执行此操作的方法记录在 Message descriptor fields as properties 中。 .通过这种方式,您可以区分不同类型和格式的消息并适本地解析它们。

    请注意,我上面链接的文档是 v7 .Net 类。由于 v6 的生命周期结束于 2011 年 9 月,因此希望新的开发都与 v7 类有关,并且最好连接到 v7 QMgr。

    编辑 - 回复评论

    检查消息格式的示例:
    根据上面链接的页面,检查 C 头文件 cmqc.h 以获取 MQMD 中的字段。这将告诉您字段名称以及字段类型。在默认的 Windows 安装中,此文件位于C:\Program Files\IBM\WebSphere MQ\tools\c\include\cmqc.h
    例如,message.getStringProperty('Root.MQMD.Format')返回消息格式。在 cmqc.h 的顶部附近,您将找到一个名为 MQFMT_ 的宏列表,其中包含 MQMD 格式字段的可能值。从 v7.01 开始,它们看起来像这样:

     /* Formats */
    #define MQFMT_NONE " "
    #define MQFMT_ADMIN "MQADMIN "
    #define MQFMT_CHANNEL_COMPLETED "MQCHCOM "
    #define MQFMT_CICS "MQCICS "
    #define MQFMT_COMMAND_1 "MQCMD1 "
    #define MQFMT_COMMAND_2 "MQCMD2 "
    #define MQFMT_DEAD_LETTER_HEADER "MQDEAD "
    #define MQFMT_DIST_HEADER "MQHDIST "
    #define MQFMT_EMBEDDED_PCF "MQHEPCF "
    #define MQFMT_EVENT "MQEVENT "
    #define MQFMT_IMS "MQIMS "
    #define MQFMT_IMS_VAR_STRING "MQIMSVS "
    #define MQFMT_MD_EXTENSION "MQHMDE "
    #define MQFMT_PCF "MQPCF "
    #define MQFMT_REF_MSG_HEADER "MQHREF "
    #define MQFMT_RF_HEADER "MQHRF "
    #define MQFMT_RF_HEADER_1 "MQHRF "
    #define MQFMT_RF_HEADER_2 "MQHRF2 "
    #define MQFMT_STRING "MQSTR "
    #define MQFMT_TRIGGER "MQTRIG "
    #define MQFMT_WORK_INFO_HEADER "MQHWIH "
    #define MQFMT_XMIT_Q_HEADER "MQXMIT "

    实际的 MQMD 结构定义在 cmqc.h 的底部附近。从 v7.0.1 开始,它看起来像这样:
     /****************************************************************/
    /* MQMD2 Structure -- Version-2 Message Descriptor */
    /****************************************************************/


    typedef struct tagMQMD2 MQMD2;
    typedef MQMD2 MQPOINTER PMQMD2;

    struct tagMQMD2 {
    MQCHAR4 StrucId; /* Structure identifier */
    MQLONG Version; /* Structure version number */
    MQLONG Report; /* Report options */
    MQLONG MsgType; /* Message type */
    MQLONG Expiry; /* Expiry time */
    MQLONG Feedback; /* Feedback or reason code */
    MQLONG Encoding; /* Numeric encoding of message data */
    MQLONG CodedCharSetId; /* Character set identifier of message
    data */
    MQCHAR8 Format; /* Format name of message data */
    MQLONG Priority; /* Message priority */
    MQLONG Persistence; /* Message persistence */
    MQBYTE24 MsgId; /* Message identifier */
    MQBYTE24 CorrelId; /* Correlation identifier */
    MQLONG BackoutCount; /* Backout counter */
    MQCHAR48 ReplyToQ; /* Name of reply-to queue */
    MQCHAR48 ReplyToQMgr; /* Name of reply queue manager */
    MQCHAR12 UserIdentifier; /* User identifier */
    MQBYTE32 AccountingToken; /* Accounting token */
    MQCHAR32 ApplIdentityData; /* Application data relating to
    identity */
    MQLONG PutApplType; /* Type of application that put the
    message */
    MQCHAR28 PutApplName; /* Name of application that put the
    message */
    MQCHAR8 PutDate; /* Date when message was put */
    MQCHAR8 PutTime; /* Time when message was put */
    MQCHAR4 ApplOriginData; /* Application data relating to
    origin */
    MQBYTE24 GroupId; /* Group identifier */
    MQLONG MsgSeqNumber; /* Sequence number of logical message
    within group */
    MQLONG Offset; /* Offset of data in physical message
    from start of logical message */
    MQLONG MsgFlags; /* Message flags */
    MQLONG OriginalLength; /* Length of original message */
    };

    cmqc.h 文件为显示的每个字段定义宏,这些将包含可能的值。这些宏也在 .Net 类中定义为 MQC 对象。 MQC is described here但由于它没有方法,该页面只是将您引向它定义的 WMQ 常量列表。那个页面 is here .

    关于.net - MQMessage 探索(使用 WebSphere MQ .NET API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4499856/

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