2016-12-09 15 views
-1

ESB 및 Camel을 사용하여 모바일 응용 프로그램에 끝점을 제공하고 있습니다. 거기에서, 나는 이전 호출의 응답이 다음 호출이 필요한지 아닌지를 결정하고 여러 호출에 동일한 요청 매개 변수를 전달해야하는 방식으로 여러 웹 서비스를 호출해야합니다.ESB + Camel 이전 호출의 응답을 기반으로 여러 웹 서비스 호출

또한 이러한 응답을 데이터베이스에 저장해야합니다.

Camel을 사용하여이 특정 사례를 구현할 수있는 가장 좋은 패턴을 알고 싶습니다.

답변

1

거기에는 여러 가지 방법이 있습니다. 예를 들어 순수한 자바의 예제와 같은 논리를 어떻게 수행하고 Camel로 옮기고 싶은지 생각해보십시오. 예상되는 행동 흐름에서 차이점은 없습니다. 조건이 있습니다 - 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> 

등등 ...