WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

WebSphere MQ メッセージ・グループ内のメッセージの送信

MQOutput ノードは、WebSphere® MQ メッセージ・グループを形成する複数メッセージを送信できます。 メッセージ・グループ・オプションを指定するには、Compute または JavaCompute ノードを構成して MQMD フィールドを設定します。

メッセージ・フローでは、以下の MQMD フィールドを設定する必要があります。
  • GroupId
  • MsgSeqNumber
  • MsgFlags
これらのフィールドの設定方法を示す、次の例のような ESQL コードを Compute ノードで使用できます。
DECLARE MSGNUM INT 0;
  DECLARE MSGTOTAL INT 5;
  WHILE MSGNUM < MSGTOTAL DO
    SET MSGNUM = MSGNUM + 1;
    CALL CopyMessageHeaders();
    -- Manually set the groupId since we cant ask the queue manager to generate one.
    -- the UUIDASBLOB function could be used here to generate one, but this must be done
    -- outside the loop to keep the same groupId throughout!
    SET OutputRoot.MQMD.GroupId = X'000000000000000000000000000000000000000000000001';
    SET OutputRoot.MQMD.MsgSeqNumber = MSGNUM;
    SET OutputRoot.MQMD.MsgFlags = MQMF_MSG_IN_GROUP;
    IF (MSGNUM = MSGTOTAL) THEN
      SET OutputRoot.MQMD.MsgFlags = MQMF_LAST_MSG_IN_GROUP;
    END IF;
    SET OutputRoot.XML.TestCase = MSGNUM;
    PROPAGATE;
  END WHILE;
  RETURN FALSE;
これらのフィールドの設定方法を示す、次の例のような Java™ コードを JavaCompute ノードで使用できます。
public class mq_group_java_JavaCompute extends MbJavaComputeNode {
      public void evaluate(MbMessageAssembly assembly) throws MbException {
        MbOutputTerminal out = getOutputTerminal("out");
        int MSGTOTAL = 5;
        for(int MSGNUM = 1 ; MSGNUM <= MSGTOTAL;MSGNUM++){
           MbMessage newMessage = new MbMessage();
           MbElement root = newMessage.getRootElement();
           MbElement mqmd = root.createElementAsFirstChild("MQMD");
           mqmd.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, 
           "GroupId", new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});
           mqmd.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "MsgSeqNumber", MSGNUM);
           if (MSGNUM == MSGTOTAL){
               mqmd.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, 
               "MsgFlags", 16); // MQMF_LAST_MSG_IN_GROUP 0x00000010
           }
           else{
               mqmd.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, 
               "MsgFlags", 8);  // MQMF_MSG_IN_GROUP      0x00000008
           }
           MbElement xmlnsc = root.createElementAsLastChild("XMLNSC");
           MbElement body = xmlnsc.createElementAsLastChild(MbElement.TYPE_NAME,"TestCase",null);
           body.setValue(MSGNUM);
           MbMessageAssembly newAssembly = new MbMessageAssembly(assembly,newMessage);
           out.propagate(newAssembly);
        }
    }
}

メッセージ・フローが 1 つの入力メッセージから複数のメッセージを送信する場合、GroupId 値を作成し、MsgSeqNumber 値を増分して、MsgFlags フィールドを設定することができます。 これらの値を設定する方法が、ESQL および Java コードの例で示されています。 ただし、メッセージ・フローが複数の入力メッセージから複数のメッセージを送信する場合には、メッセージ・フローはフロー・インスタンス間で GroupId 値と MsgSeqNumber 値を保管する必要があります。共有変数を使用することで、これが可能になります。

メッセージのグループ化の詳細については、WebSphere MQ バージョン 7 インフォメーション・センター・オンラインの「アプリケーション・プログラミング・ガイド」セクションを参照してください。 メッセージのグループ化の際に重要な WebSphere MQ フィールドに関する詳細については、WebSphere MQ バージョン 7 インフォメーション・センター・オンラインの「アプリケーション・プログラミング・リファレンス」セクションを参照してください。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:45:45


タスク・トピックタスク・トピック | バージョン 8.0.0.5 | ac25710_