Repository: camel Updated Branches: refs/heads/master 7ba190216 -> 64c57a8db
CAMEL-10877: service-call eip : add a spring-cloud example Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/64c57a8d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/64c57a8d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/64c57a8d Branch: refs/heads/master Commit: 64c57a8db2ab4760dc580f64b5ec2f4462a81f63 Parents: 7ba1902 Author: lburgazzoli <lburgazz...@gmail.com> Authored: Thu Mar 23 15:27:06 2017 +0100 Committer: lburgazzoli <lburgazz...@gmail.com> Committed: Thu Mar 23 15:27:06 2017 +0100 ---------------------------------------------------------------------- components/camel-spring-cloud-netflix/pom.xml | 4 - ...ngCloudDiscoveryClientAutoConfiguration.java | 62 ++++++++ ...pringCloudLoadBalancerAutoConfiguration.java | 8 +- examples/README.adoc | 8 +- .../README.adoc | 53 +++++++ .../consumer/pom.xml | 153 +++++++++++++++++++ .../camel/example/ConsumerApplication.java | 59 +++++++ .../src/main/resources/application.properties | 16 ++ .../consumer/src/main/resources/logback.xml | 34 +++++ .../pom.xml | 40 +++++ .../service/pom.xml | 112 ++++++++++++++ .../service/src/main/bash/consul-run.sh | 52 +++++++ .../camel/example/ServiceApplication.java | 69 +++++++++ .../src/main/resources/application.properties | 8 + .../service/src/main/resources/logback.xml | 34 +++++ examples/pom.xml | 1 + 16 files changed, 702 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/components/camel-spring-cloud-netflix/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-spring-cloud-netflix/pom.xml b/components/camel-spring-cloud-netflix/pom.xml index a111462..5d6ca11 100644 --- a/components/camel-spring-cloud-netflix/pom.xml +++ b/components/camel-spring-cloud-netflix/pom.xml @@ -63,10 +63,6 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-spring-boot</artifactId> </dependency> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-spring-cloud</artifactId> - </dependency> <!-- Testing dependencies --> <dependency> http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudDiscoveryClientAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudDiscoveryClientAutoConfiguration.java b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudDiscoveryClientAutoConfiguration.java new file mode 100644 index 0000000..cc29cc4 --- /dev/null +++ b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudDiscoveryClientAutoConfiguration.java @@ -0,0 +1,62 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.spring.cloud; + + +import org.apache.camel.cloud.LoadBalancer; +import org.apache.camel.spring.boot.cloud.CamelCloudAutoConfiguration; +import org.apache.camel.spring.boot.cloud.CamelCloudConfigurationProperties; +import org.apache.camel.spring.boot.cloud.CamelCloudServiceDiscovery; +import org.apache.camel.spring.boot.cloud.CamelCloudServiceDiscoveryAutoConfiguration; +import org.apache.camel.spring.boot.util.GroupCondition; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration; +import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConditionalOnBean({ CamelCloudAutoConfiguration.class, LoadBalancerClient.class }) +@AutoConfigureAfter({ LoadBalancerAutoConfiguration.class, CamelCloudServiceDiscoveryAutoConfiguration.class }) +@EnableConfigurationProperties(CamelCloudConfigurationProperties.class) +@Conditional(CamelSpringCloudDiscoveryClientAutoConfiguration.LoadBalancerCondition.class) +public class CamelSpringCloudDiscoveryClientAutoConfiguration { + + @Bean(name = "load-balancer-discovery-client") + @ConditionalOnMissingBean + public DiscoveryClient serviceDiscoveryClient(CamelCloudServiceDiscovery serviceDiscovery) { + return new CamelSpringCloudDiscoveryClient("service-discovery-client", serviceDiscovery); + } + + // ******************************* + // Condition + // ******************************* + + public static class LoadBalancerCondition extends GroupCondition { + public LoadBalancerCondition() { + super( + "camel.cloud", + "camel.cloud.discovery-client" + ); + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java index 8ac2119..c6bcf74 100644 --- a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java +++ b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java @@ -25,6 +25,7 @@ import org.apache.camel.spring.boot.cloud.CamelCloudServiceDiscoveryAutoConfigur import org.apache.camel.spring.boot.util.GroupCondition; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration; @@ -39,16 +40,13 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(CamelCloudConfigurationProperties.class) @Conditional(CamelSpringCloudLoadBalancerAutoConfiguration.LoadBalancerCondition.class) public class CamelSpringCloudLoadBalancerAutoConfiguration { + @Bean(name = "load-balancer") + @ConditionalOnMissingBean public LoadBalancer cloudLoadBalancer(LoadBalancerClient loadBalancerClient) { return new CamelSpringCloudLoadBalancer(loadBalancerClient); } - @Bean(name = "load-balancer-discovery-client") - public DiscoveryClient serviceDiscoveryClient(CamelCloudServiceDiscovery serviceDiscovery) { - return new CamelSpringCloudDiscoveryClient("service-discovery-client", serviceDiscovery); - } - // ******************************* // Condition // ******************************* http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/README.adoc ---------------------------------------------------------------------- diff --git a/examples/README.adoc b/examples/README.adoc index 06e4da6..4f1825c 100644 --- a/examples/README.adoc +++ b/examples/README.adoc @@ -11,12 +11,16 @@ View the individual example READMEs for details. ### Examples // examples: START -Number of Examples: 90 (9 deprecated) +Number of Examples: 92 (10 deprecated) [width="100%",cols="4,2,4",options="header"] |======================================================================= | Example | Category | Description +| link:camel-example-spring-boot-servicecall/README.adoc[Spring Boot Servicecall] (camel-example-spring-boot-servicecall) | | An example showing how to work with Camel ServiceCall EIP and Spring Boot + +| link:camel-example-spring-cloud-servicecall/README.adoc[Spring Cloud Servicecall] (camel-example-spring-cloud-servicecall) | | An example showing how to work with Camel ServiceCall EIP and Spring Cloud + | link:camel-example-cdi/README.md[CDI] (camel-example-cdi) | Beginner | An example showing how to work with Camel and CDI for dependency injection | link:camel-example-cdi-properties/README.md[CDI Properties] (camel-example-cdi-properties) | Beginner | DeltaSpike configuration properties CDI example @@ -131,7 +135,7 @@ Number of Examples: 90 (9 deprecated) | link:camel-example-box-osgi/README.md[Box OSGi] (camel-example-box-osgi) | OSGi | An example which use a Box Endpoint in OSGi -| link:camel-example-cdi-osgi/README.md[CDI OSGi] (camel-example-cdi-osgi) | OSGi | PAX CDI example +| link:camel-example-cdi-osgi/README.md[CDI OSGi] (camel-example-cdi-osgi) | OSGi | *deprecated* PAX CDI example | link:camel-example-cxf-blueprint/README.md[CXF Blueprint] (camel-example-cxf-blueprint) | OSGi | An example which use a CXF consumer and the OSGI HTTP Service http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/README.adoc ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/README.adoc b/examples/camel-example-spring-cloud-servicecall/README.adoc new file mode 100644 index 0000000..8d5f385 --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/README.adoc @@ -0,0 +1,53 @@ +# Spring Cloud and ServiceCall EIP Example + +This example show how to use Camel with ServiceCall EIP with spring-cloud and consul. + +This example includes two maven modules: + + - service that exposes a number of services + - consumer that consumes services + +## Configuration + +The consumer is configured in the src/main/resources/application.properties + +## Build + +You can build this example using + + mvn compile + +## Run the example + +Using multiple shells: + + - start consul: + + $ cd services + $ src/main/bash/consul-run.sh + + - start the service: + + $ cd service + $ mvn spring-boot:run + + - start the consumer + + $ cd consumer + $ mvn spring-boot:run + +## Test the example: + +In a new shell: + + $ curl localhost:8080/camel/serviceCall/service1 + Hi!, I'm service-1 on camel-1/route1 + $ curl localhost:8080/camel/serviceCall/service2 + Hi!, I'm service-1 on camel-1/route2 + +If you keep calling the http endpoint you'll notice they are consumed using a round robin policy and that only the services matching specific tags are consumed. + +## More information + +You can find more information about Apache Camel at the website: http://camel.apache.org/ + http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/consumer/pom.xml ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/consumer/pom.xml b/examples/camel-example-spring-cloud-servicecall/consumer/pom.xml new file mode 100644 index 0000000..a2fee1f --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/consumer/pom.xml @@ -0,0 +1,153 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>camel-example-spring-cloud-servicecall</artifactId> + <version>2.19.0-SNAPSHOT</version> + </parent> + + <artifactId>camel-example-spring-cloud-servicecall-consumer</artifactId> + <name>Camel :: Example :: Spring Cloud :: ServiceCall :: Consumer</name> + <description>An example showing how to work with Camel ServiceCall EIP and Spring Cloud (Consumer)</description> + + <properties> + <category>Beginner</category> + + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <spring.boot-version>${spring-boot-version}</spring.boot-version> + <spring.cloud-version>1.1.3.RELEASE</spring.cloud-version> + </properties> + + <dependencyManagement> + <dependencies> + <!-- Spring Boot BOM --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-dependencies</artifactId> + <version>${spring.boot-version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-consul-dependencies</artifactId> + <version>${spring.cloud-version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <!-- Camel BOM --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-boot-dependencies</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + + <!-- Spring Boot --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-undertow</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-actuator</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-consul-discovery</artifactId> + </dependency> + + <!-- Camel --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-cloud-starter</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-servlet-starter</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-undertow-starter</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-http-starter</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-jackson-starter</artifactId> + </dependency> + + <!-- test --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-spring</artifactId> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <version>${spring-boot-version}</version> + <executions> + <execution> + <goals> + <goal>repackage</goal> + </goals> + </execution> + </executions> + </plugin> + + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/consumer/src/main/java/org/apache/camel/example/ConsumerApplication.java ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/consumer/src/main/java/org/apache/camel/example/ConsumerApplication.java b/examples/camel-example-spring-cloud-servicecall/consumer/src/main/java/org/apache/camel/example/ConsumerApplication.java new file mode 100644 index 0000000..6b27931 --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/consumer/src/main/java/org/apache/camel/example/ConsumerApplication.java @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.example; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.stereotype.Component; + +//CHECKSTYLE:OFF +/** + * A sample Spring Boot application that starts the Camel routes. + */ +@SpringBootApplication +@EnableDiscoveryClient +public class ConsumerApplication { + @Component + public class ConsumerRoute extends RouteBuilder { + @Override + public void configure() throws Exception { + rest("/serviceCall") + .get("/{serviceId}") + .to("direct:service-call"); + + from("direct:service-call") + .setBody().constant(null) + .to("log:service-call?level=INFO&showAll=true&multiline=true") + .choice() + .when(header("serviceId").isEqualTo("service1")) + .serviceCall("service-1", "undertow:http://service-1") + .when(header("serviceId").isEqualTo("service2")) + .serviceCall("service-2", "undertow:http://service-2"); + } + } + + /** + * A main method to start this application. + */ + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } + +} +//CHECKSTYLE:ON http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/application.properties ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/application.properties b/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/application.properties new file mode 100644 index 0000000..970cbd7 --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/application.properties @@ -0,0 +1,16 @@ +# Spring Boot +endpoints.enabled=false +endpoints.health.enabled=true + +# Spring cloud +spring.cloud.consul.config.enabled=false +spring.cloud.consul.discovery.enabled=true +spring.cloud.consul.discovery.server-list-query-tags[service-1] = camel +spring.cloud.consul.discovery.server-list-query-tags[service-2] = service-call + +# Camel +camel.springboot.main-run-controller=true +camel.springboot.jmx-enabled=false + +camel.rest.component=servlet +camel.rest.binding-mode=auto http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/logback.xml ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/logback.xml b/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/logback.xml new file mode 100644 index 0000000..e2bb6f1 --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/consumer/src/main/resources/logback.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern> + </encoder> + </appender> + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern> + </encoder> + <file>target/camel-example-spring-boot-servicecall-consumer.log</file> + </appender> + <root level="INFO"> + <!--<appender-ref ref="FILE"/>--> + <appender-ref ref="STDOUT"/> + </root> +</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/pom.xml ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/pom.xml b/examples/camel-example-spring-cloud-servicecall/pom.xml new file mode 100644 index 0000000..10c3517 --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/pom.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>examples</artifactId> + <version>2.19.0-SNAPSHOT</version> + </parent> + + <artifactId>camel-example-spring-cloud-servicecall</artifactId> + <name>Camel :: Example :: Spring Cloud :: ServiceCall</name> + <description>An example showing how to work with Camel ServiceCall EIP and Spring Cloud</description> + <packaging>pom</packaging> + + <modules> + <module>consumer</module> + <module>service</module> + </modules> + +</project> http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/service/pom.xml ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/service/pom.xml b/examples/camel-example-spring-cloud-servicecall/service/pom.xml new file mode 100644 index 0000000..ef8e7eb --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/service/pom.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>camel-example-spring-cloud-servicecall</artifactId> + <version>2.19.0-SNAPSHOT</version> + </parent> + + <artifactId>camel-example-spring-cloud-servicecall-service</artifactId> + <name>Camel :: Example :: Spring Cloud :: ServiceCall :: Service</name> + <description>An example showing how to work with Camel ServiceCall EIP and Spring Cloud (Service)</description> + + <properties> + <category>Beginner</category> + + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <spring.boot-version>${spring-boot-version}</spring.boot-version> + </properties> + + <dependencyManagement> + <dependencies> + <!-- Spring Boot BOM --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-dependencies</artifactId> + <version>${spring.boot-version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <!-- Camel BOM --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-boot-dependencies</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + + <!-- Spring Boot --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter</artifactId> + </dependency> + + <!-- Camel --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-undertow-starter</artifactId> + </dependency> + + <!-- test --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-spring</artifactId> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <version>${spring-boot-version}</version> + <executions> + <execution> + <goals> + <goal>repackage</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/service/src/main/bash/consul-run.sh ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/service/src/main/bash/consul-run.sh b/examples/camel-example-spring-cloud-servicecall/service/src/main/bash/consul-run.sh new file mode 100755 index 0000000..f5ac79c --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/service/src/main/bash/consul-run.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +CONSUL_VER="0.7.5" +CONSUL_ZIP="consul_${CONSUL_VER}_linux_amd64.zip" + +# cleanup +rm -rf "target/consul-data" +rm -rf "target/consul-config" +rm -rf "target/consul" + +mkdir -p target/ +mkdir -p target/consul-data +mkdir -p target/consul-config + +if [ ! -f target/${CONSUL_ZIP} ]; then + wget "https://releases.hashicorp.com/consul/${CONSUL_VER}/${CONSUL_ZIP}" -O target/${CONSUL_ZIP} +fi + +cat > target/consul-config/services.json <<EOF +{ + "services": [{ + "id": "s1i1", "name": "service-1", "tags": ["camel", "service-call"], "address": "localhost", "port": 9011 + }, { + "id": "s1i2", "name": "service-1", "tags": ["camel", "service-call"], "address": "localhost", "port": 9012 + }, { + "id": "s1i3", "name": "service-1", "tags": ["camel", "service-call"], "address": "localhost", "port": 9013 + }, { + "id": "s1i4", "name": "service-1", "address": "localhost", "port": 9014 + }, { + "id": "s2i1", "name": "service-2", "tags": ["camel", "service-call"], "address": "localhost", "port": 9021 + }, { + "id": "s2i2", "name": "service-2", "tags": ["camel", "service-call"], "address": "localhost", "port": 9022 + }, { + "id": "s2i3", "name": "service-2", "tags": ["camel", "service-call"], "address": "localhost", "port": 9023 + }, { + "id": "s2i4", "name": "service-2", "address": "localhost", "port": 9024 + }] +} +EOF + +unzip -d target target/${CONSUL_ZIP} + +target/consul \ + agent \ + -server \ + -bootstrap \ + -datacenter camel \ + -advertise 127.0.0.1 \ + -bind 0.0.0.0 \ + -log-level trace \ + -data-dir target/consul-data \ + -config-dir target/consul-config \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/service/src/main/java/org/apache/camel/example/ServiceApplication.java ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/service/src/main/java/org/apache/camel/example/ServiceApplication.java b/examples/camel-example-spring-cloud-servicecall/service/src/main/java/org/apache/camel/example/ServiceApplication.java new file mode 100644 index 0000000..e6454d6 --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/service/src/main/java/org/apache/camel/example/ServiceApplication.java @@ -0,0 +1,69 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.example; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.stereotype.Component; + +//CHECKSTYLE:OFF +/** + * A sample Spring Boot application that starts the Camel routes. + */ +@SpringBootApplication +public class ServiceApplication { + + @Component + public class Service1Route extends RouteBuilder { + public void configure() throws Exception { + from("undertow:http://localhost:9011") + .to("log:org.apache.camel.example?level=INFO&showAll=true&multiline=true") + .transform().simple("Hi!, I'm service-1 on ${camelId}/${routeId}"); + from("undertow:http://localhost:9012") + .to("log:org.apache.camel.example?level=INFO&showAll=true&multiline=true") + .transform().simple("Hi!, I'm service-1 on ${camelId}/${routeId}"); + from("undertow:http://localhost:9013") + .to("log:org.apache.camel.example?level=INFO&showAll=true&multiline=true") + .transform().simple("Hi!, I'm service-1 on ${camelId}/${routeId}"); + } + } + + @Component + public class Service2Route extends RouteBuilder { + public void configure() throws Exception { + from("undertow:http://localhost:9021") + .to("log:org.apache.camel.example?level=INFO&showAll=true&multiline=true") + .transform().simple("Hi!, I'm service-2 on ${camelId}/${routeId}"); + from("undertow:http://localhost:9022") + .to("log:org.apache.camel.example?level=INFO&showAll=true&multiline=true") + .transform().simple("Hi!, I'm service-2 on ${camelId}/${routeId}"); + from("undertow:http://localhost:9023") + .to("log:org.apache.camel.example?level=INFO&showAll=true&multiline=true") + .transform().simple("Hi!, I'm service-2 on ${camelId}/${routeId}"); + } + } + + /** + * A main method to start this application. + */ + public static void main(String[] args) { + SpringApplication.run(ServiceApplication.class, args); + } + +} +//CHECKSTYLE:ON http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/application.properties ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/application.properties b/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/application.properties new file mode 100644 index 0000000..3585779 --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/application.properties @@ -0,0 +1,8 @@ +# Spring Boot +endpoints.enabled=false +endpoints.health.enabled=true + +# Camel +camel.springboot.main-run-controller=true +camel.springboot.jmx-enabled=false + http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/logback.xml ---------------------------------------------------------------------- diff --git a/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/logback.xml b/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/logback.xml new file mode 100644 index 0000000..39249ae --- /dev/null +++ b/examples/camel-example-spring-cloud-servicecall/service/src/main/resources/logback.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern> + </encoder> + </appender> + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern> + </encoder> + <file>target/camel-example-spring-boot-servicecall-service-1.log</file> + </appender> + <root level="INFO"> + <!--<appender-ref ref="FILE"/>--> + <appender-ref ref="STDOUT"/> + </root> +</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/64c57a8d/examples/pom.xml ---------------------------------------------------------------------- diff --git a/examples/pom.xml b/examples/pom.xml index 352d04e..bb82380 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -94,6 +94,7 @@ <module>camel-example-spring-boot-rest-jpa</module> <module>camel-example-spring-boot-rest-swagger</module> <module>camel-example-spring-boot-servicecall</module> + <module>camel-example-spring-cloud-servicecall</module> <module>camel-example-spring-dm</module> <module>camel-example-spring-javaconfig</module> <module>camel-example-spring-jms</module>