Available as of Camel 2.18
serviceCall EIP allows to call remote services in a distributed system. The service to call is looked up in a service registry of some sorts such as Kubernetes, Consul, etcd, Zookeeper. The EIP separates the configuration of the service registry from the calling of the service.
Maven users will need to add the dependency for the service registry supported from the following:
Each implementation has their own set of configuration.
When calling a service you may just refer to the name of the service in the EIP as shown below:
And in XML DSL:
Camel will then lookup a service with the name
foo from the chosen Camel component that integrates with the service registry. The lookup returns a set of
IP:PORT pairs that refer to a list of active servers that host the remote service. Camel will then select a server at random from the list to use and then build a Camel URI with the chosen IP and PORT number.
By default Camel uses the HTTP component, so the example above will resolve into a Camel URI that is called by a dynamic
toD endpoint as shown:
You can also call the service using URI parameters such as
You can also provide a context-path such as shown:
Service Name to Camel URI Examples
So as you can see above the service name is resolved as a Camel endpoint URI, and here is a few more examples (where
-> shows the resolution of the Camel URI):
If you want full control of the resolved URI you can provide an additional URI parameter where you specify the Camel URI as you want. In the URI you can use the service name which are then resolved to
IP:PORT as shown:
In the example above we want to call a service named
myService and we can control the resolved URI as in the second parameter. Notice how in the first example we can use
serviceName.port to refer to either the
PORT. If you just use
serviceName then it's resolved as
Configuring Service Call
By default Camel will call the service using the HTTP component, but you can configure to use a different component such as HTTP4, Netty4 HTTP as shown:
In XML DSL:
These are the common configuration that each implementation is sharing.
These properties are specific to what service call implementation are in use.
For example if using ribbon, then the client properties are define in
Sets the default Camel component to use for calling the remote service. By default the
http component is used.
You can configure this to use
restlet or some other components of choice.
If the service does not use the HTTP protocol then other components such as
amqp etc can be used.
If the service call has been configured using a URI the component specified in the URI is used instead of this default component.
Sets a reference to a custom
org.apache.camel.spi.ServiceCallLoadBalancer to use.
Sets a reference to a custom
org.apache.camel.spi.ServiceCallServerListStrategy to use.
Kubernetes API version when using
Sets the Certificate Authority data when using
Sets the Certificate Authority data that are loaded from the file when using
Sets the Client Certificate data when using
Sets the Client Certificate data that are loaded from the file when using
Sets the Client Keystore algorithm, such as RSA when using
Sets the Client Keystore data when using
Sets the Client Keystore data that are loaded from the file when using
Sets the Client Keystore passphrase when using
Sets the DNS domain to use for
The choice of strategy used to lookup the service.
The list of lookup strategies are:
Use environment variables.
Use DNS domain names.
Use Java Client to call the Kubernetes master API and query which servers are actively hosting the service.
The URL for the Kubernetes master when using
The Kubernetes namespace to use. By default the namespace's name is taken from the environment variable
OAUTH token for authentication (instead of username/password) when using
Sets the password for authentication when using
Sets whether to turn on trust certificate check when using
Sets the username for authentication when using
Currently no ribbon specific options yet.