This is an automated email from the ASF dual-hosted git repository.

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 1bcfad165d42a9a497d64bcde8f715b3a40ef4f8
Author: lburgazzoli <lburgazz...@gmail.com>
AuthorDate: Mon May 28 16:08:27 2018 +0200

    service registry doc
---
 camel-core/src/main/docs/service-registry.adoc | 157 +++++++++++++++++++++++++
 1 file changed, 157 insertions(+)

diff --git a/camel-core/src/main/docs/service-registry.adoc 
b/camel-core/src/main/docs/service-registry.adoc
new file mode 100644
index 0000000..e7c1833
--- /dev/null
+++ b/camel-core/src/main/docs/service-registry.adoc
@@ -0,0 +1,157 @@
+[[ServiceRegistry-ServiceRegistry]]
+== Service Registry
+
+*Available as of Camel 2.22*
+
+[WARNING]
+====
+*Experimental feature*
+====
+
+Service registration is a key part of service discovery which Camel leverages 
through the _Service Call EIP_ and as of v 2.22.0 Camel provides an 
experimental support to ease the process to expose routes in a cloud 
environment and consume them with minimal configuration.
+
+=== Service Registry Set-Up
+
+A _Service Registry_ is just like any other camel service so set it up you 
only need to register your implementations to the camel context:
+
+[source,java]
+----
+ServiceRegistry service = new MyServiceRegistry();
+
+context.addService(service);
+----
+
+The configuration of the _Service Registry_ depends on the implementation you 
have chosen.
+Out of the box camel provides the following implementations:
+
+[cols="1,1,2", options="header"]
+|====
+|Type         |Module             | Class
+|consul       |camel-consul       | 
org.apache.camel.component.consul.cloud.ConsulServiceRegistry
+|zookeeper    |camel-zookeeper    | 
org.apache.camel.component.zookeeper.cloud.ZooKeeperServiceRegistry
+|spring-cloud |camel-spring-cloud | 
org.apache.camel.component.spring.cloud.CamelSpringCloudServiceRegistry
+|====
+
+On Spring/Blueprint all the _Service Registry_ instances are automatically 
added to the camel context.
+
+=== Serice Registry Usage
+
+The _Service Registry SPI_ is leveraged by the following new implementations:
+
+- *ServiceRegistryRoutePolicy*
++
+This is an implementation of a RoutePolicy that register/deregister routes to 
a given _Service Registry_ according to route's life-cycle
++
+[source,java]
+----
+fiRoutePolicy policy = new ServiceRegistrationRoutePolicy()
+
+// bind the policy to one or more routes
+from("undertow:http://0.0.0.0:8080";)
+    .routePolicy(policy)
+    .log("Route ${routeId} has been invoked");
+----
++
+To apply the same policy to all the routes a dedicated _RoutePolicyFactory_ 
can be used:
++
+[source,java]
+----
+// add the service registry route policy factory to context
+context.addRoutePolicyFactory(new ServiceRegistrationRoutePolicyFactory()));
+----
++
+To configure how the service is exposed you can add route specific properties 
like:
++
+[source,java]
+----
+// bind the policy to one or more routes
+from("undertow:http://0.0.0.0:8080";)
+    .routePolicy(policy)
+    .routeProperty(ServiceDefinition.SERVICE_META_NAME, "my-service")
+    .routeProperty(ServiceDefinition.SERVICE_META_ID, "my-id")
+    .routeProperty(ServiceDefinition.SERVICE_META_PORT, "8080")
+    .log("Route ${routeId} has been invoked");
+----
++
+Service name and service id can also be provided by _routeId_ and _routeGroup_
++
+[source,java]
+----
+// bind the policy to one or more routes
+from("undertow:http://0.0.0.0:8080";)
+    .routePolicy(policy)
+    .routeGroup("my-service")
+    .routeId("my-id")
+    .routeProperty(ServiceDefinition.SERVICE_META_PORT, "8080")
+    .log("Route ${routeId} has been invoked");
+----
++
+[TIP]
+====
+Some component such has camel-undertow and those based on camel-http-common 
implement _DiscoverableService_ and they can automatically provide the metadata 
needed for service registration.
+====
++
+[TIP]
+====
+Any property prefixed with _service._ is automatically added to the service's 
metadata.
+====
+
+- *Service Component*
++
+The service component is similar to a _ServiceRegistrationRoutePolicyFactory_ 
but let to "tags" routes that need to be registered to the _Service Registry_ 
by prefixing the related endpoints according to the service component syntax:
++
+[source]
+----
+service:serviceName:delegateUri[?options]
+----
++
+Example:
++
+[source,java]
+----
+from("service:my-service:undertow:http://0.0.0.0:8080";)
+    .log("Route ${routeId} has been invoked");
+----
+
+To configure how the service is exposed you can add service specific endpoint 
options such as:
+
+[source,java]
+----
+from("service:my-service:undertow:http://0.0.0.0:8080?service.id=my-service-id";)
+    .log("Route ${routeId} has been invoked");
+----
+
+[TIP]
+====
+Any option prefixed with _service._ is automatically added to the service's 
metadata.
+====
+
+== Spring Cloud
+
+The _Service Registry_ binding for _Spring Cloud_ let you register your route 
with minimal code changes a a _Service Registry_ is automatically added to the 
Camel Context as soon as the camel-spring-cloud dependency is added to the 
classpath.
+
+[WARNING]
+====
+As the spring-cloud backend has some limitations you need to include also some 
additional dependencies according to the selected backend. At the moment, the 
following implementations are provided:
+
+[options="header"]
+|====
+|Spring Cloud           |Camel
+|spring-cloud-consul    |camel-spring-cloud-consul
+|spring-cloud-zookeeper |camel-spring-cloud-zookeeper
+|====
+====
+
+Assuming the consul backend has been chosen the following code will configure 
and activate the _Service Registry_:
+
+[source,properties]
+----
+# Spring cloud
+spring.cloud.consul.enabled = true
+spring.cloud.consul.discovery.enabled = true
+
+# Camel Cloud
+camel.cloud.service-registry.service-host = localhost
+----
+
+To register a route, the easy way is then to use the _service_ component as 
described above.

-- 
To stop receiving notification emails like this one, please contact
lburgazz...@apache.org.

Reply via email to