Asynchronous Consumer サンプルについて

Asynchronous Consumer サンプルでは、非同期ノードを使用して Web サービスを呼び出す方法を示します。 Web サービスの WSDL (Web Services Definition Language) がツールにインポートされ、それを使用して Web サービスで公開される操作を呼び出すように SOAPAsyncRequest ノードが構成されます。 また、このサンプルでは、既存の WebSphere MQ インターフェースを拡張して Web サービス要求を出す方法も例示します。

このサンプルでは、まず HTTP トランスポートが使用されますが、JMS を使用するように変更することが可能です。 「JMS トランスポート使用のための Asynchronous Consumer サンプルの構成」を参照してください。

サンプルの Web サービスは、1 つの操作を公開する単純な注文受け付けサービスです。この Web サービスは、サンプル内でメッセージ・フローとして用意されています。この Web サービスは、注文された部品が使用可能であることを示す応答を常に戻します。 Web サービスを拡張する 1 つのオプションとして、在庫データベースを照会するために Database ノードを使用することが考えられます。

Asynchronous Consumer サンプルでは、以下のタスクを示します。

メッセージ・フロー

下の図は、Web クライアント・メッセージ・フローを示しています。

Web クライアント・メッセージ・フローの画面取り

ノード・タイプ ノード名
MQInput MQWSInput
MQOutput MQWSOutput
Compute Compute Request、Format Response
SOAPAsyncRequest SOAP Asynchronous Request
SOAPAsyncResponse SOAP Asynchronous Response

Web サービス要求は、SOAP ドメインの Compute Request ノードを使用して WebSphere MQ メッセージから構成されます。 Web サービス操作は SOAP Asynchronous Request ノードを使用して呼び出され、 その応答は、ペアの SOAP Asynchronous Response ノードが受け取ります。 最後に、Format Response ノードが応答を WebSphere MQ メッセージとしてフォーマットします。

下の図は、Web サービス・メッセージ・フローを示しています。

Web サービス・メッセージ・フローの画面取り

ノード・タイプ ノード名
SOAPInput SOAP Input
RouteToLabel Route WS Operation
Label submitPO
Compute Compute Response
SOAPReply SOAP Reply

着信 SOAP メッセージは、Route WS Operation ノードを使用して submitPO ノードに経路指定されます。 この例では、サンプル Web サービスによって 1 つの操作だけが公開されます。 Web サービスが複数の操作を公開しているときに、複数の Label ノードを使用すると、さまざまな操作を使用できます。 SOAP 応答が Compute Response ノードで生成されるのは、応答が Web クライアントに戻される前です。

メッセージ

Web クライアント・メッセージ・フローは、WebSphere MQ メッセージによって駆動されます。 サンプルを実行するためのテスト・クライアント・ファイルが用意されています。 そのファイルは、下の画面取りに示すメッセージ・フォーマットを使用します。

OrderMessage メッセージ・フォーマットの画面取り

Web サービス要求メッセージおよび応答メッセージの有効なフォーマットを、以下の編集済みのスキーマ抽出で示します。

<xsd:element name="submitPORequest">
...
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="partNo" type="xsd:string"/>
            <xsd:element name="partQuantity" type="xsd:int"/>
            <xsd:element name="personName">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="firstName" type="xsd:string"/>
                  <xsd:element name="lastName" type="xsd:string"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="address">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="street" type="xsd:string"/>
                  <xsd:element name="city" type="xsd:string"/>
                  <xsd:element name="zipCode" type="xsd:string"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
</xsd:element>
<xsd:element name="submitPOResponse">
...
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="orderStatus" type="xsd:string"/>
            <xsd:element name="orderAmt" type="xsd:int"/>
            <xsd:element name="partNo" type="xsd:string"/>
            <xsd:element name="partQuantity" type="xsd:int"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

サンプルの実行後、無効な要求メッセージを送信するようにサンプルを拡張することもできます。無効な要求メッセージを送信するには、Compute Request ノードを編集して、不良エレメントを SOAP メッセージ本体に追加する必要があります。 Web サービスによって SOAP 障害メッセージが生成されるので、SOAPAsyncRequest ノード上の Failure ターミナルを接続する必要があります。 SOAP 障害について詳しくは、WebSphere Message Broker 資料の SOAP 障害を参照してください。

サンプルのホームに戻る