1.4. 끝점

1.4.1. 개요

Apache Camel 끝점은 경로에 있는 메시지의 소스 및 싱크입니다. 끝점은 매우 일반적인 종류의 빌딩 블록입니다. 충족해야 하는 유일한 요구 사항은 메시지 소스(프로덕션 끝점) 또는 메시지 싱크(컨트리스팅)로 작동한다는 것입니다. 따라서 HTTP와 같은 프로토콜 지원 끝점에서 정기적으로 더미 메시지를 생성하는 Quartz와 같은 간단한 타이머 끝점에 이르기까지 Apache Camel에서 지원되는 다양한 끝점 유형이 있습니다. Apache Camel의 주요 강점 중 하나는 새 엔드포인트 유형을 구현하는 사용자 지정 구성 요소를 비교적 쉽게 추가할 수 있다는 것입니다.

1.4.2. 엔드포인트 URI

끝점은 다음과 같은 일반적인 형식을 갖는 끝점 URI 로 식별됩니다.

scheme:contextPath[?queryOptions]

URI 스키마http 와 같은 프로토콜을 식별하고 contextPath 는 프로토콜에서 해석되는 URI 세부 정보를 제공합니다. 또한 대부분의 스키마를 사용하면 다음 형식으로 지정된 쿼리 옵션인 queryOptions 를 정의할 수 있습니다.

?option01=value01&option02=value02&...

예를 들어 다음 HTTP URI를 사용하여 Google 검색 엔진 페이지에 연결할 수 있습니다.

http://www.google.com

다음 File URI를 사용하여 C:\temp\src\data 디렉터리에 나타나는 모든 파일을 읽을 수 있습니다.

file://C:/temp/src/data

모든 스키마 가 프로토콜을 나타내는 것은 아닙니다. 경우에 따라 스키마 는 타이머와 같은 유용한 유틸리티에 대한 액세스를 제공합니다. 예를 들어 다음 Timer 엔드포인트 URI는 1초마다 교환을 생성합니다(=1000밀리초). 이를 사용하여 경로의 활동을 예약할 수 있습니다.

timer://tickTock?period=1000

1.4.3. 장기 엔드 포인트 URI 작업

경우에 따라 끝점 URI가 제공된 모든 관련 구성 정보로 인해 상당히 길어질 수 있습니다. JBoss Fuse 6.2 이상에서는 긴 URI 작업을 보다 쉽게 관리할 수 있도록 두 가지 접근 방식을 사용할 수 있습니다.

Endpoints 9월 구성

끝점을 별도로 구성할 수 있으며 경로에서 단축 ID를 사용하여 끝점을 참조합니다.

<camelContext ...>

  <endpoint id="foo" uri="ftp://foo@myserver">
    <property name="password" value="secret"/>
    <property name="recursive" value="true"/>
    <property name="ftpClient.dataTimeout" value="30000"/>
    <property name="ftpClient.serverLanguageCode" value="fr"/>
  </endpoint>

  <route>
    <from uri="ref:foo"/>
    ...
  </route>
</camelContext>

URI에서 일부 옵션을 구성한 다음 속성 속성을 사용하여 추가 옵션을 지정하거나 URI의 옵션을 재정의할 수도 있습니다.

<endpoint id="foo" uri="ftp://foo@myserver?recursive=true">
  <property name="password" value="secret"/>
  <property name="ftpClient.dataTimeout" value="30000"/>
  <property name="ftpClient.serverLanguageCode" value="fr"/>
</endpoint>
새 라인을 통해 엔드 포인트 구성 분할

새 행을 사용하여 URI 속성을 분할할 수 있습니다.

<route>
  <from uri="ftp://foo@myserver?password=secret&amp;
           recursive=true&amp;ftpClient.dataTimeout=30000&amp;
           ftpClientConfig.serverLanguageCode=fr"/>
  <to uri="bean:doSomething"/>
</route>
참고

각 줄에서 하나 이상의 옵션을 지정하고 각각 & 로 구분하여 지정할 수 있습니다.

1.4.4. URI에 시간 지정

Apache Camel 구성 요소의 많은에는 일정 기간(예: 시간 초과 값을 지정하는 등) 값이 있는 옵션이 있습니다. 기본적으로 이러한 기간 옵션은 일반적으로 밀리 초의 기간으로 해석되는 순수수로 지정됩니다. 그러나 Apache Camel은 기간 동안 더 읽기 쉬운 구문을 지원하므로 시간, 분, 초 단위로 기간을 표시할 수 있습니다. 공식적으로 사람이 읽을 수 있는 기간은 다음 구문을 따르는 문자열입니다.

[NHour(h|hour)][NMin(m|minute)][NSec(s|second)]

대괄호 안에 있는 각 용어( [] )는 선택 사항이며 표기법 (A|B)AB 가 대안임을 나타냅니다.

예를 들어 다음과 같이 45 분 기간을 사용하여 타이머 끝점을 구성할 수 있습니다.

from("timer:foo?period=45m")
  .to("log:foo");

다음과 같이 시간, 분 및 두 번째 단위의 임의의 조합을 사용할 수도 있습니다.

from("timer:foo?period=1h15m")
  .to("log:foo");
from("timer:bar?period=2h30s")
  .to("log:bar");
from("timer:bar?period=3h45m58s")
  .to("log:bar");

1.4.5. URI 옵션에 원시 값 지정

기본적으로 URI에 지정하는 옵션 값은 자동으로 URI로 인코딩됩니다. 경우에 따라 이는 바람직하지 않은 동작입니다. 예를 들어 암호 옵션을 설정할 때 URI 인코딩 없이 원시 문자 문자열을 전송하는 것이 좋습니다.

구문, RAW(RawValue) 로 옵션 값을 지정하여 URI 인코딩을 전환할 수 있습니다. 예를 들면 다음과 같습니다.

from("SourceURI")
 .to("ftp:joe@myftpserver.com?password=RAW(se+re?t&23)&binary=true")

이 예에서 password 값은 리터럴 값 se+re?t&23 으로 전송됩니다.

1.4.6. 대소문자를 구분하지 않는 enum 옵션

일부 끝점 URI 옵션은 Java 열거 상수에 매핑됩니다. 예를 들어 로그 구성 요소의 수준 옵션은 enum 값, INFO,WARN,ERROR 등을 사용할 수 있습니다. 이 유형 변환은 대소문자를 구분하지 않으므로 다음 대안을 사용하여 로그 생산자 끝점의 로깅 수준을 설정할 수 있습니다.

<to uri="log:foo?level=info"/>
<to uri="log:foo?level=INfo"/>
<to uri="log:foo?level=InFo"/>

1.4.7. URI 리소스 지정

Camel 2.17에서 XSLT와 같은 리소스 기반 구성 요소는 ref: 를 접두사로 사용하여 레지스트리에서 리소스 파일을 로드할 수 있습니다.

예를 들어 ifmyvelocityscriptbeanmysimplescriptbean 은 레지스트리에 있는 두 빈 ID입니다.

Velocity endpoint:
------------------
from("velocity:ref:myvelocityscriptbean").<rest_of_route>.

Language endpoint (for invoking a scripting language):
-----------------------------------------------------
from("direct:start")
  .to("language:simple:ref:mysimplescriptbean")
 Where Camel implicitly converts the bean to a String.

1.4.8. Apache Camel 구성 요소

각 URI 스키마Apache Camel 구성 요소가 기본적으로 엔드포인트 팩토리인 Apache Camel 구성 요소에 매핑됩니다. 즉, 특정 유형의 엔드포인트를 사용하려면 런타임 컨테이너에 해당 Apache Camel 구성 요소를 배포해야 합니다. 예를 들어 JMS 엔드포인트를 사용하려면 컨테이너에 JMS 구성 요소를 배포합니다.

Apache Camel은 다양한 전송 프로토콜 및 타사 제품과 애플리케이션을 통합할 수 있는 다양한 구성 요소를 제공합니다. 예를 들어 일반적으로 사용되는 구성 요소 중 일부는 File, JMS, CXF (Web services), HTTP,kafkaty, Direct 및 Mock입니다. 지원되는 구성 요소의 전체 목록은 Apache Camel 구성 요소 설명서 를 참조하십시오.

대부분의 Apache Camel 구성 요소는 Camel 코어에 별도로 패키지됩니다. Maven을 사용하여 애플리케이션을 빌드하는 경우 관련 구성 요소 아티팩트에 대한 종속성을 추가하여 쉽게 애플리케이션에 구성 요소(및 타사 종속 항목)를 추가할 수 있습니다. 예를 들어 HTTP 구성 요소를 포함하려면 다음 Maven 종속성을 프로젝트 POM 파일에 추가합니다.

<!-- Maven POM File -->
  <properties>
    <camel-version>{camelFullVersion}</camel-version>
    ...
  </properties>

  <dependencies>
    ...
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-http</artifactId>
      <version>${camel-version}</version>
    </dependency>
    ...
  </dependencies>

다음 구성 요소는 Camel 코어( camel-core 아티팩트에서)에 기본 제공되므로 항상 사용할 수 있습니다.

  • Cryostat
  • 검색
  • 데이터 세트
  • 직접
  • 파일
  • log
  • mock
  • 속성
  • Ref
  • SEDA
  • 타이머
  • VM

1.4.9. 소비자 끝점

소비자 끝점 은 경로 시작 시 표시되는 끝점입니다(즉, from() DSL 명령에서). 즉, 소비자 끝점은 경로에서 처리를 시작합니다. 이는 새로운 교환 인스턴스(일반적으로 수신 또는 획득한 일부 메시지에 따라)를 생성하고 나머지 경로에서 교환을 처리하는 스레드를 제공합니다.

예를 들어 다음 JMS 소비자 끝점은 결제 대기열에서 메시지를 가져와서 경로에서 처리합니다.

from("jms:queue:payments")
  .process(SomeProcessor)
  .to("TargetURI");

또는 이와 동등한 경우 Spring XML:

<camelContext id="CamelContextID"
              xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="jms:queue:payments"/>
    <process ref="someProcessorId"/>
    <to uri="TargetURI"/>
  </route>
</camelContext>

일부 구성 요소는 소비자만 사용할 수 있습니다. 즉, 소비자 끝점을 정의하는 데만 사용할 수 있습니다. 예를 들어 Quartz 구성 요소는 소비자 끝점을 정의하는 데 독점적으로 사용됩니다. 다음 Quartz 엔드포인트는 1초마다 (1000밀리초) 이벤트를 생성합니다.

from("quartz://secondTimer?trigger.repeatInterval=1000")
  .process(SomeProcessor)
  .to("TargetURI");

원하는 경우 fromF() Java DSL 명령을 사용하여 엔드포인트 URI를 포맷된 문자열로 지정할 수 있습니다. 예를 들어 사용자 이름과 암호를 FTP 끝점의 URI로 대체하려면 다음과 같이 Java에 경로를 작성할 수 있습니다.

fromF("ftp:%s@fusesource.com?password=%s", username, password)
  .process(SomeProcessor)
  .to("TargetURI");

여기서 첫 번째 발생 %susername 문자열의 값으로 교체되고 두 번째 발생 %spassword 문자열로 교체됩니다. 이 문자열 형식 지정 메커니즘은 String.format() 에 의해 구현되며 C Cryostat () 함수에서 제공하는 포맷과 유사합니다. 자세한 내용은 java.util.Formatter 를 참조하십시오.

1.4.10. 생산자 끝점

생산자 엔드포인트 는 경로의 중간 또는 끝에 표시되는 엔드포인트입니다(예: to() DSL 명령). 즉, 생산자 끝점은 기존 교환 오브젝트를 수신하고 교환 내용을 지정된 엔드포인트로 보냅니다.

예를 들어 다음 JMS 생산자 끝점은 현재 교환의 내용을 지정된 JMS 큐로 푸시합니다.

from("SourceURI")
  .process(SomeProcessor)
  .to("jms:queue:orderForms");

Spring XML과 동일합니다.

<camelContext id="CamelContextID" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="SourceURI"/>
    <process ref="someProcessorId"/>
    <to uri="jms:queue:orderForms"/>
  </route>
</camelContext>

일부 구성 요소는 생산자만, 즉 생산자 끝점을 정의하는 데만 사용할 수 있습니다. 예를 들어 HTTP 끝점은 생산자 엔드포인트를 정의하는 데만 사용됩니다.

from("SourceURI")
  .process(SomeProcessor)
  .to("http://www.google.com/search?hl=en&q=camel+router");

원하는 경우 toF() Java DSL 명령을 사용하여 엔드포인트 URI를 포맷된 문자열로 지정할 수 있습니다. 예를 들어 사용자 지정 Google 쿼리를 HTTP URI로 대체하려면 다음과 같이 Java에서 경로를 작성할 수 있습니다.

from("SourceURI")
  .process(SomeProcessor)
  .toF("http://www.google.com/search?hl=en&q=%s", myGoogleQuery);

여기서 %s 발생은 사용자 지정 쿼리 문자열인 myGoogleQuery 로 교체됩니다. 자세한 내용은 java.util.Formatter 를 참조하십시오.