2016-12-09 16 views
-1

私はESBとCamelを使用してモバイルアプリケーションにエンドポイントを提供しています。そこから、前の呼び出しからの応答が、次の呼び出しが呼び出されるかどうかを判断し、複数の呼び出しに同じ要求パラメーターを渡す必要があるように、複数のWebサービスを呼び出す必要があります。ESB + Camel前の呼び出しからの応答に基づいて複数のWebサービスを呼び出す

さらに、これらの応答をデータベースに保存する必要があります。

Camelを使用してこの特定のユースケースを実装できる最適なパターンを知りたいと思います。

答えて

1

これを行うには多くの方法があります。たとえば純粋なJavaの例をどうやってキャロルに移したいか考えてみてください。将来の行動フローからは違いはありません。あなたは条件を持っています - あなたはIFかSWITCH操作を持っている必要があります。

  1. ストレートフォワード方式。 前のサービスを呼び出した後、次の呼び出しの決定要因である属性を持つ本文に応答があります。 Camelの "choice-when-otherwise"構造(Javaの "switch"文のアナログ)を使用し、 "when"では体からの状態をチェックするために利用可能な方法を使用します(例: "simple"、 "xpath"、 "xquery"など)。 )

  2. 次のコールを識別するロジックが複雑な場合 - 次のコールを識別するカスタムプロセッサを作成し、特別な交換プロパティを設定してから同じ「choice-when-otherwise」ブロックに移動してください 例の場合< "previous-result"、 "next-call">というマップを持つことができます。

とあなたのルートが(私は春を使用)のように見えることがあります。

<cml:to uri="previous_uri"/> 
<cml:processor ref="my_selector"/> <!-- it sets Exchange property "next_call" based on result from previous --> 
<cml:choice> 
    <cml:when> 
     <cml:simple>${exchangeProperty.next_call} =="SERVICE1"/> 
     <cml:to uri="next_service1_uri"/> 
     ... process Service1 result logic ... 
    </cml:when> 
    <cml:when> 
     <cml:simple>${exchangeProperty.next_call} =="SERVICE2"/> 
     <cml:to uri="next_service2_uri"/> 
     ... process Service2 result logic ... 
    </cml:when> 

のように...

関連する問題