8.12. 서비스 호출
8.12.1. 개요
Camel 2.18부터 사용 가능합니다.
서비스 호출 패턴을 사용하면 분산 시스템에서 원격 서비스를 호출할 수 있습니다. 호출할 서비스는 Kubernetes, Consul, etcd 또는 Zookeeper와 같은 서비스 레지스트리에서 조회됩니다. 패턴은 서비스 레지스트리의 구성을 서비스 호출과 구분합니다.
Maven 사용자는 서비스 레지스트리를 사용하려면 종속성을 추가해야 합니다. 다음과 같은 가능성이 있습니다.
-
camel-consul
-
camel-etcd
-
camel-kubenetes
-
camel-ribbon
8.12.2. 서비스 호출 구문
서비스를 호출하려면 다음과 같이 서비스 이름을 참조하십시오.
from("direct:start") .serviceCall("foo") .to("mock:result");
다음 예제에서는 서비스를 호출하는 XML DSL을 보여줍니다.
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <serviceCall name="foo"/> <to uri="mock:result"/> </route> </camelContext>
이 예제에서 Camel은 서비스 레지스트리와 통합된 구성 요소를 사용하여 foo
라는 이름으로 서비스를 조회합니다. 조회는 원격 서비스를 호스팅하는 활성 서버 목록을 참조하는 IP:PORT
쌍 세트를 반환합니다. 그런 다음 Camel은 사용할 서버를 무작위로 선택하여 선택한 IP
및 PORT
번호로 Camel URI를 빌드합니다.
기본적으로 Camel은 HTTP 구성 요소를 사용합니다. 위의 예에서 호출은 다음과 같이 동적 toD
엔드포인트에서 호출하는 Camel URI로 확인됩니다.
toD("http://IP:PORT")
<toD uri="http:IP:port"/>
URI 매개변수를 사용하여 서비스를 호출할 수 있습니다(예: beer=yes
):
serviceCall("foo?beer=yes")
<serviceCall name="foo?beer=yes"/>
컨텍스트 경로를 제공할 수도 있습니다. 예를 들면 다음과 같습니다.
serviceCall("foo/beverage?beer=yes")
<serviceCall name="foo/beverage?beer=yes"/>
8.12.3. 서비스 이름을 URI로 변환
표시된 대로 서비스 이름은 Camel 엔드포인트 URI로 확인됩니다. 다음은 몇 가지 추가 예입니다. →
은 Camel URI의 해상도를 보여줍니다.
serviceCall("myService") -> http://hostname:port serviceCall("myService/foo") -> http://hostname:port/foo serviceCall("http:myService/foo") -> http:hostname:port/foo
<serviceCall name="myService"/> -> http://hostname:port <serviceCall name="myService/foo"/> -> http://hostname:port/foo <serviceCall name="http:myService/foo"/> -> http:hostname:port/foo
확인된 URI를 완전히 제어하려면 원하는 Camel URI를 지정하는 추가 URI 매개변수를 제공합니다. 지정된 URI에서 IP:PORT
로 확인되는 서비스 이름을 사용할 수 있습니다. 다음은 몇 가지 예입니다.
serviceCall("myService", "http:myService.host:myService.port/foo") -> http:hostname:port/foo serviceCall("myService", "netty4:tcp:myService?connectTimeout=1000") -> netty:tcp:hostname:port?connectTimeout=1000
<serviceCall name="myService" uri="http:myService.host:myService.port/foo"/> -> http:hostname:port/foo <serviceCall name="myService" uri="netty4:tcp:myService?connectTimeout=1000"/> -> netty:tcp:hostname:port?connectTimeout=1000
위의 예제에서는 myService
라는 서비스를 호출합니다. 두 번째 매개 변수는 해결된 URI의 값을 제어합니다. 첫 번째 예제에서는 serviceName.host
및 serviceName.port
를 사용하여 IP 또는 PORT를 나타냅니다. serviceName
만 지정하면 IP:PORT
로 확인됩니다.
8.12.4. 서비스를 호출하는 구성 요소 구성
기본적으로 Camel은 HTTP 구성 요소를 사용하여 서비스를 호출합니다. 다음 예제와 같이 HTTP4 또는 Netty4 HTTP와 같은 다른 구성 요소 사용을 구성할 수 있습니다.
KubernetesConfigurationDefinition config = new KubernetesConfigurationDefinition(); config.setComponent("netty4-http"); // Register the service call configuration: context.setServiceCallConfiguration(config); from("direct:start") .serviceCall("foo") .to("mock:result");
다음은 XML DSL의 예입니다.
<camelContext xmlns="http://camel.apache.org/schema/spring"> <kubernetesConfiguration id="kubernetes" component="netty4-http"/> <route> <from uri="direct:start"/> <serviceCall name="foo"/> <to uri="mock:result"/> </route> </camelContext>
8.12.6. Kubernetes를 사용할 때 서비스 호출 옵션
Kubernetes 구현에서는 다음 옵션을 지원합니다.
옵션 | 기본값 | 설명 |
| 클라이언트 조회를 사용할 때 Kubernetes API 버전입니다. | |
| 클라이언트 조회를 사용할 때 인증 기관 데이터를 설정합니다. | |
| 클라이언트 조회를 사용할 때 파일에서 로드되는 인증 기관 데이터를 설정합니다. | |
| 클라이언트 조회를 사용할 때 클라이언트 인증서 데이터를 설정합니다. | |
| 클라이언트 조회를 사용할 때 파일에서 로드되는 클라이언트 인증서 데이터를 설정합니다. | |
| 클라이언트 조회를 사용할 때 RSA와 같은 클라이언트 키 저장소 알고리즘을 설정합니다. | |
| 클라이언트 조회를 사용할 때 클라이언트 키 저장소 데이터를 설정합니다. | |
| 클라이언트 조회를 사용할 때 파일에서 로드되는 클라이언트 키 저장소 데이터를 설정합니다. | |
| 클라이언트 조회를 사용할 때 클라이언트 키 저장소 암호를 설정합니다. | |
|
| |
|
| 서비스를 찾는 데 사용되는 전략 선택 조회 전략에는 다음이 포함됩니다.
|
| 클라이언트 조회를 사용할 때 Kubernetes 마스터의 URL입니다. | |
|
사용할 Kubernetes 네임스페이스입니다. 기본적으로 네임스페이스의 이름은 환경 변수 | |
| 클라이언트 조회를 사용할 때 인증에 OAUTH 토큰(사용자 이름/암호 대신)을 설정합니다. | |
| 클라이언트 조회를 사용할 때 인증 암호를 설정합니다. | |
| false | 클라이언트 조회를 사용할 때 신뢰 인증서 검사를 설정할지 여부를 설정합니다. |
| 클라이언트 조회를 사용할 때 인증 사용자 이름을 설정합니다. |