JBoss 퓨즈-Camel 개념

이 장에서는 다양한 Camel 개념을 이해합니다. 시작해야 할 핵심 개념을 이해하기 위해 기본적인 예를 들어 보겠습니다.

CamelContext

모든 낙타 애플리케이션에는 최소한 하나의 CamelContext가 있습니다. 이곳은 낙타 루트를 추가하는 곳입니다. 유사하다ApplicationContext

낙타 컨텍스트는 모든 것을 함께 보관하는 컨테이너로 생각할 수 있습니다. 하나의 낙타 컨텍스트에는 내부에 여러 경로가있을 수 있습니다.

노선

CamelContext는 하나 이상의 경로를 포함 할 수 있습니다. 경로는 데이터가 한 끝점에서 다른 끝점으로 낙타 컨텍스트로 흐르는 방식을 정의하는 통합 논리입니다.

끝점

엔드 포인트는 시스템이 메시지를 보내거나받을 수있는 채널의 끝입니다. 이것은 우리가 의사 소통 언어에서 목적지 또는 소스라고 부르는 것입니다.

구성품

구성 요소는 Camel의 확장 지점입니다. 구성 요소는 기술, 데이터 형식, 변환기 등에 대한 인터페이스가 될 수 있습니다. 또한 엔드 포인트의 공장 역할을 할 수 있습니다.

EIP

EIP는 Enterprise Integration Pattern을 나타냅니다. 이들은 반복되는 문제에 대해 식별되고 잘 알려진 솔루션입니다. Camel은 대부분의 엔터프라이즈 통합 패턴을 지원합니다.

콘텐츠 기반 라우터

CBR 패턴을 사용하면 입력 파일의 내용에 따라 데이터를 라우팅 할 수 있습니다.

이 패턴은 입력 본문의 내용에 따라 값을 라우팅해야 할 때 사용됩니다.

다음 예제는 다음에서 데이터를 읽습니다. D:/data/input예배 규칙서. 읽은 후 데이터 태그 내부의 값 태그를 확인합니다. 값 태그에value1,로 전송됩니다. D:/value1, 포함 된 경우 value2,로 전송됩니다. D:/value2 이 두 가지가 모두 없으면 다른 사람에게 전송됩니다.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/data/input"/>
      <choice>
         <when>
            <xpath>/data/value = 'value1'</xpath>
            <to uri = "file:///D:/value1"/>
         </when> 
         <when>
            <xpath>/data/value = 'value2'</xpath>
            <to uri = "file:///D:/value2"/>
         </when>  
			
         <otherwise>
            <to uri = "file:///D:/others "/>
         </otherwise>
			
      </choice>
   </route>
</camelContext>

Input

D : /data/input/message1.xml

<data>
   <value>value1</value>
</data>

D : /data/input/message2.xml

<data>
   <value>value2</value>
</data>

Output

D : / 값 1 /

<data>
   <value>value1</value>
</data>

D : / 값 2 /

<data>
   <value>value2</value>
</data>

쪼개는 도구

분할기 패턴은 입력 데이터를 더 작은 청크로 분할하는 데 사용됩니다.

이 패턴은 청크로 분할해야하는 대용량 데이터 입력과 함께 대부분 사용되므로 처리 가능하게됩니다. 입력 토큰 문자열을 기반으로 입력을 더 작은 조각으로 나눕니다.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/inbox"/>
      <split streaming = "true">
         <tokenize token = "order" xml = "true"/>
         <to uri = "activemq:queue:order"/>
      </split>
   </route>
</CamelContext>

Input

D : /inbox/message.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Output

AMQ를 확인하면 3 개의 메시지가 게시됩니다.

<order>
   <data>
      <value>value4</value>
   </data>
</order>

수신자 목록

수신자 목록 패턴은 메시지 본문 자체에서 수신자 목록을 검색해야 할 때 사용됩니다.

다음 예에서는 고객 태그에 쉼표로 구분 된 문자열 목록으로 나열된 모든 수신자에게 메시지가 전송됩니다.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "jms:xmlOrders" />
      <recipientList>
         <xpath>/order/customer</xpath>
      </recipientList>
   </route>
</camelContext>

기타 EIP

Camel은 식별 된 거의 모든 EIP를 지원합니다. 일반적으로 사용되는 EIP 중 일부는 다음과 같습니다.

  • Log − 전체 메시지 또는 그 일부를 기록하려면

  • Message Filter − 메시지 내용 필터링

  • Re-Sequencer − 모든 토큰을 순서대로 얻으려면

  • Wiretap − 여행 메시지를 검사하려면

EIP의 전체 목록과 사용법은 Camel의 공식 문서에서 찾을 수 있습니다. http://camel.apache.org/eip.html

Camel의 예외 처리

Using Error Handler − 이것은 낙타에서 예외를 처리하는 가장 쉬운 방법입니다.

이를 사용하려면 오류 핸들러 클래스 빈을 구성하고이를 참조로 제공해야합니다. CamelContext errorHandlerRef 속성.

<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
   <property name = "logName" value = "mylogger.name"/>
   <property name = "level" value = "DEBUG"/>
</bean>

<camelContext errorHandlerRef = ” loggingErrorHandler” >
   …
</camelContext>

Try Catch finally 사용

Camel은 Java 스타일도 지원합니다. Try Catch Finally block 오류 처리를 위해.

Java와 마찬가지로 다음과 같은 세 개의 블록이 있습니다.

  • doTry 블록에는 예외를 생성 할 수있는 코드가 포함되어 있습니다.

  • doCatch 블록은 예외 발생시 실행해야하는 코드를 포함합니다.

  • doFinally블록에는 예외에 관계없이 실행되어야하는 코드가 있습니다. 예외가 발생했는지 여부에 관계없이 항상 실행됩니다.

Note− Mock은 테스트 구성 요소이며 다른 목적으로 권장되지 않습니다. 테스트 주도 개발의 jMOck 구성 요소와 마찬가지로 테스트에 사용되는 camel 구성 요소입니다.

<route>
   <from uri = "direct:start"/>
   <doTry>
      <process ref = "someProcesorThatmayFail"/>
      <to uri = "mock:result"/>
		
      <doCatch>
         <exception>java.io.IOException</exception>
         <exception>java.lang.IllegalStateException</exception>
         <to uri = "mock:catch"/>
      </doCatch>
		
      <doFinally>
         <to uri = "mock:finally"/>
      </doFinally>
		
   </doTry>
</route>

위의 예에서는 catch 블록에서 처리해야하는 예외 목록을 제공 할 수 있습니다.

퓨즈에 번들 배포

다음을 사용하여 퓨즈 시작 Fuse.bat/start.bat.

start.bat를 사용하여 Fuse를 시작하는 경우 client.bat를 사용하여 Fuse에 연결하십시오. 다음 스크린 샷과 같이 UI를 가져와야합니다.

Karaf 및 Fuse 명령에 액세스하기위한 CLI입니다.

install –s mvn:group.id /artifact.id/version 
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT