2

私は WebSphere MQ の初心者ですが、MQMessage API に関して 1 つ質問があります。MQMessage の受信者は事前に知っておく必要があるようです。

  • 書き込まれたメッセージ タイプ (WriteInt の場合、ReadInt など)
  • プロパティの名前と型 (SetBooleanProperty(Name) の場合は GetBooleanProperty(Name))

    私には意味がありません。メッセージ構造に慣れていない場合は、データを取得するまですべてのオプションを検討する必要がありますか?

    助けていただければ幸いです、ガイ

  • 4

    1 に答える 1

    3

    はい、メッセージが固定長レコード形式などの構造化データである場合、メッセージを解析するには、メッセージの形式を事前に知っておく必要があることは間違いありません。一方、メッセージペイロードがタグ付けされたデータ構造(有効なXMLなど)である場合は、通常の解析を使用してアクセスします。たとえば、最初に正確な構造を知らなくても、XPathを使用してXMLペイロードにアクセスできます。

    あなたが言及するメソッド(WriteInt、ReadIntなど)は通常、既知の形式からデータを抽出し、バッファーポインターを次のフィールドに進めるために使用されます。ただし、UTF文字列を読み書きする方法もあります。何らかの理由でアプリケーションがさまざまなメッセージタイプを処理する必要がある場合は、メッセージ記述子を照会することにより、メッセージ形式とメッセージタイプについて問い合わせることができます。これを行う方法は、プロパティとしてメッセージ記述子フィールドに文書化されています。このようにして、メッセージのさまざまなタイプと形式を区別し、それらを適切に解析できます。

    上でリンクしたドキュメントはv7.Netクラスにあることに注意してください。v6のサポート終了は2011年9月であるため、新しい開発はすべてv7クラスで行われ、できればv7QMgrに接続することが望まれます。

    編集-コメントへの応答

    メッセージ形式の確認例:
    上記のリンク先のページに従って、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についてはここで説明しますが、メソッドがないため、このページでは、MQCが定義するWMQ定数のリストを参照するだけです。そのページはここにあります

    于 2010-12-22T05:03:19.120 に答える