8.12. Service Call
概要
Camel 2.18 から利用可能です。
Service Call パターンにより、分散システムでリモートサービスを呼び出すことができます。呼び出すサービスは、Kubernetes、Consul、etcd、Zookeeper などのサービスレジストリーで検索されます。このパターンは、サービスレジストリーの設定とサービスの呼び出しを分離します。
Maven ユーザーは、使用するサービスレジストリーの依存関係を追加する必要があります。可能性としては、以下のようなものがあります。
-
camel-consul
-
camel-etcd
-
camel-kubenetes
-
camel-ribbon
サービスを呼び出すための構文
サービスを呼び出すには、以下のようにサービス名を参照してください。
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"/>
beer=yes
のような URI パラメーターを使用してサービスを呼び出すことができます。
serviceCall("foo?beer=yes")
<serviceCall name="foo?beer=yes"/>
コンテキストパスを指定することもできます。例を以下に示します。
serviceCall("foo/beverage?beer=yes")
<serviceCall name="foo/beverage?beer=yes"/>
サービス名の 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
という名前のサービスを呼び出しています。2 番目のパラメーターは、解決した URI の値を制御します。最初の例では serviceName.host
と serviceName.port
を使い、IP または PORT のいずれかを参照している点に注意してください。serviceName
のみを指定する場合、IP:PORT
に解決されます。
サービスを呼び出すコンポーネントの設定
デフォルトでは、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>
Kubernetes を使用する場合のサービスコールオプション
Kubernetes 実装では、以下のオプションがサポートされます。
オプション | デフォルト値 | 説明 |
| クライアントルックアップを使用する場合の Kubernetes API バージョン。 | |
| クライアントルックアップをする際に使用する認証局データを設定します。 | |
| クライアントルックアップをする際にファイルからロードされる認証局データを設定します。 | |
| クライアントルックアップをする際に使用するクライアント証明書データを設定します。 | |
| クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。 | |
| クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。 | |
| クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。 | |
| クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。 | |
| クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。 | |
|
| |
|
| サービスを検索するために使用されるストラテジーの選択。検索ストラテジーには以下が含まれます。
|
| クライアントルックアップを使用する際の Kubernetes マスターの URL。 | |
|
使用する Kubernetes の名前空間。デフォルトでは、namespace の名前は環境変数 | |
| クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。 | |
| クライアントルックアップを使用する際に使用する、認証パスワードを設定します。 | |
| false | クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。 |
| クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。 |