8.12. 服务调用
概述
可从 Camel 2.18 开始。
服务调用 模式允许您在分布式系统中调用远程服务。调用的服务会在服务 registry 中查找,如 Kubernetes、Consul、etcd 或 Zookeeper。该模式将服务 registry 的配置与调用服务分开。
Maven 用户必须为要使用的服务 registry 添加依赖项。可能性包括:
-
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 使用与服务 registry 集成的组件使用名称 foo 来查找服务。查找会返回一组 IP:PORT 对,引用托管远程服务的活跃服务器列表。然后,Camel 随机从列出服务器进行选择,以使用所选 IP 和 PORT 号构建 Camel URI。
默认情况下,Camel 使用 HTTP 组件。在上例中,调用解析为 Camel URI,该 URI 由动态 toD 端点调用,如下所示:
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"/>
将服务名称转换为 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。
配置调用该服务的组件
默认情况下,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>所有实现共享的选项
每个实现都提供以下选项:
| 选项 | 默认值 | 描述 |
|
|
指定特定于您使用的服务调用实施的属性。例如,如果您使用 ribbon 实施,则客户端属性在 | |
|
|
| 设置用来调用远程服务的默认 Camel 组件。您可以配置使用组件,如 netty4-http、jetty、restlet 或一些其他组件。如果服务没有使用 HTTP 协议,则必须使用另一个组件,如 mqtt, jms, amqp。如果您在服务调用中指定 URI 参数,则使用此参数中指定的组件而不是默认值。 |
|
|
设置自定义 | |
|
|
设置自定义 |
使用 Kubernetes 时的服务调用选项
Kubernetes 实现支持以下选项:
| 选项 | 默认值 | 描述 |
|
| 使用客户端查找时的 Kubernetes API 版本。 | |
|
| 使用客户端查找时设置证书颁发机构数据。 | |
|
| 在使用客户端查找时,设置从文件加载的证书颁发机构数据。 | |
|
| 在使用客户端查找时设置客户端证书数据。 | |
|
| 在使用客户端查找时,设置从文件加载的客户端证书数据。 | |
|
| 在使用客户端查找时,设置客户端密钥存储算法,如 RSA。 | |
|
| 在使用客户端查找时设置 Client Keystore 数据。 | |
|
| 在使用客户端查找时,设置从文件加载的客户端密钥存储数据。 | |
|
| 在使用客户端查找时设置客户端密钥存储密码短语。 | |
|
|
设置用于 | |
|
|
| 用于查找服务的策略选择。查找策略包括:
|
|
| 使用客户端查找时的 Kubernetes 主机的 URL。 | |
|
|
要使用的 Kubernetes 命名空间。默认情况下,命名空间的名称取自环境变量 | |
|
| 在使用客户端查找时,设置 OAUTH 令牌用于身份验证(而不是用户名/密码)。 | |
|
| 在使用客户端查找时设置用于身份验证的密码。 | |
|
| false | 设置在使用客户端查找时是否打开信任证书检查。 |
|
| 使用客户端查找时设置用于身份验证的用户名。 |