2

Webサービスを介してリクエストを受け取るフローがあります。コンポーネントバインディングを使用して、そのリクエストをJMSキューに転送します。ただし、そのキューからasync-replyを取得し、それをWebサービスへの応答として使用したいと思います。フローでreply-toとasync-reply-routerを使用する必要がありますか?または、Mule 3でそれを行う他の方法はありますか?ポインタはありますか?

<flow name="mviService">
    <http:inbound-endpoint address="http://localhost:62005/mvi"
        exchange-pattern="request-response">
        <cxf:jaxws-service serviceClass="com.xyz.services.mvi.MVIServicePortType" />
    </http:inbound-endpoint>
    <component class="com.pennmutual.services.mvi.MVIServiceImpl">
        <binding interface="com.pennmutual.mvi.helper.XMLReqProcessorInterface"
            method="process121Order">
            <jms:outbound-endpoint queue="mviq.121.order" />
        </binding>
            </component>

            <async-reply>

            </async-reply>

      </flow>

============編集済み-再構成された質問については以下を参照してください=================

シナリオをうまく説明できていないと思います。もう一度やり直します。これがシナリオです-

  1. クライアントは、このフローで説明されているサービスを「mviService」と呼びます。mviServiceは、HTTP/SOAPベースのインバウンドエンドポイントを介してXML要求を取得します。このリクエストをXML121Request.4と呼びましょう
  2. MVI "com.xyz.services.mvi.MVIServiceImpl"で定義されたコンポーネントは、XML121Requestにいくつかの変更を加えます。
  3. このXML121をJMSキュー「mviq.121.order」に転送します。これにはコンポーネントバインディングを使用します。
  4. このJMSキューへのアウトバウンドエンドポイントは、この要求が転送されるサードパーティのWebサービスです。サードパーティはXML121の受信を確認し、同期Webサービス呼び出しが返されます。
  5. そのサードパーティサービスからの応答は、後の時点(通常は数秒)で行われます。応答は非同期で行われます。サードパーティがMVIで別のWebサービスエンドポイントを呼び出し、XML121Responseを送信します。
  6. MVIは、この応答を「mviq.async.service.reply」という名前のJMSキューに入れます。
  7. 「mviService」フローは、この応答を待機し、この応答を(いくつかの変更後)呼び出し元に送信する必要があります(ステップ1)。

サードパーティから応答を取得できます。この応答は、「mviq.async.service.reply」という名前のキューに入れられます。このメッセージを使用/消費し、MVIへの最初の呼び出しへの応答として返したいと思います。

「request-reply」を使用しようとしています。

    <request-reply timeout="60000">
        <vm:outbound-endpoint path="request" />
        <jms:inbound-endpoint queue="mviq.async.service.reply"
            exchange-pattern="one-way" />
    </request-reply>

この場合、アウトバウンドエンドポイントは必要ありませんが、request-replyタグで必要とされるため、アウトバウンドエンドポイントを設定する必要があるという問題があります。その時点でフローは60秒間待機しますが、キュー「mviq.async.service.reply」に何かを入れても、相関IDが一致しないため、サービスがタイムアウトしてエラーが返されます。

フローは以下のとおりです。

<flow name="mviService">
    <http:inbound-endpoint address="http://localhost:62005/mvi"
        exchange-pattern="request-response">
        <cxf:jaxws-service serviceClass="com.xyz.services.mvi.MVIServicePortType" />
    </http:inbound-endpoint>
    <component class="com.pennmutual.services.mvi.MVIServiceImpl">
        <binding interface="com.xyz.mvi.helper.XMLReqProcessorInterface"
            method="process121Order">
            <jms:outbound-endpoint queue="mviq.121.order" />
        </binding>
    </component>

    <!-- <logger message="XML Correlation ID 1 is #[mule:message.headers(all)]" /> -->
    <request-reply timeout="60000">
        <vm:outbound-endpoint path="request" /> <!-- we don't care about this -->
        <jms:inbound-endpoint queue="mviq.async.service.reply"
            exchange-pattern="one-way" />
    </request-reply>
        <!-- <component class="com.xyz.mvi.CreateMVIServiceResponse"/> -->
</flow>

=====REPLYTOを使用したFLow=============

<flow name="mviService">
    <http:inbound-endpoint address="http://localhost:62005/mvi"
        exchange-pattern="request-response">
        <cxf:jaxws-service serviceClass="com.xyz.services.mvi.MVIServicePortType" />
    </http:inbound-endpoint>
    <component class="com.xyz.services.mvi.MVIServiceImpl">
        <binding interface="com.xyz.mvi.helper.XMLReqProcessorInterface"
            method="process121Order">
            <jms:outbound-endpoint queue="mviq.121.order" exchange-pattern="request-response">
                <message-properties-transformer scope="outbound">
                    <add-message-property key="MULE_REPLYTO" value="mviq.async.service.reply" />
                </message-properties-transformer>
            </jms:outbound-endpoint>
        </binding>
     </component>
</flow>
4

1 に答える 1

2

サービス コンポーネント クラスを作成せずに を使用することをお勧めします。cxf:proxy-serviceこれにより、SOAP エンベロープに直接アクセスでき、XML レベルで必要な方法で応答を組み立てることができます。

これにより、サービス コンポーネント クラスが課す制約から解放されるため、バインディングを使用する必要がなくなり、使用への扉が開かれますrequest-response

詳細については、この SO の回答を参照し、(スキニー)プロキシ サービスのユーザー ガイドを確認してください。

于 2012-07-18T19:28:05.630 に答える