Repository: camel Updated Branches: refs/heads/master 56f2b24a2 -> 3e7b1cfdd
http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/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 deleted file mode 100644 index d1c3a7f..0000000 --- a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * 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.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.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(CamelSpringCloudLoadBalancerAutoConfiguration.LoadBalancerCondition.class) -public class CamelSpringCloudLoadBalancerAutoConfiguration { - - @Bean(name = "load-balancer") - @ConditionalOnMissingBean - public LoadBalancer cloudLoadBalancer(LoadBalancerClient loadBalancerClient) { - return new CamelSpringCloudLoadBalancer(loadBalancerClient); - } - - // ******************************* - // Condition - // ******************************* - - public static class LoadBalancerCondition extends GroupCondition { - public LoadBalancerCondition() { - super( - "camel.cloud", - "camel.cloud.load-balancer" - ); - } - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java new file mode 100644 index 0000000..50447f7 --- /dev/null +++ b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java @@ -0,0 +1,81 @@ +/** + * 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.CamelContext; +import org.apache.camel.CamelContextAware; +import org.apache.camel.cloud.ServiceDefinition; +import org.apache.camel.cloud.ServiceLoadBalancer; +import org.apache.camel.cloud.ServiceLoadBalancerFunction; +import org.apache.camel.impl.cloud.DefaultServiceDefinition; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.ObjectHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; + +public class CamelSpringCloudServiceLoadBalancer extends ServiceSupport implements CamelContextAware, ServiceLoadBalancer { + private static final Logger LOGGER = LoggerFactory.getLogger(CamelSpringCloudServiceLoadBalancer.class); + + private final LoadBalancerClient loadBalancerClient; + private CamelContext camelContext; + + public CamelSpringCloudServiceLoadBalancer(LoadBalancerClient loadBalancerClient) { + this.loadBalancerClient = loadBalancerClient; + } + + @Override + public CamelContext getCamelContext() { + return camelContext; + } + + @Override + public void setCamelContext(CamelContext camelContext) { + this.camelContext = camelContext; + } + + @Override + protected void doStart() throws Exception { + ObjectHelper.notNull(camelContext, "camelContext"); + ObjectHelper.notNull(loadBalancerClient, "loadBalancerClient"); + + LOGGER.info("ServiceCall is using cloud load balancer of type: {}", loadBalancerClient.getClass()); + } + + @Override + protected void doStop() throws Exception { + } + + @Override + public <T> T process(String serviceName, ServiceLoadBalancerFunction<T> function) throws Exception { + return loadBalancerClient.execute(serviceName, i -> function.apply(instanceToDefinition(i))); + } + + // ******************************* + // Helpers + // ******************************* + + private ServiceDefinition instanceToDefinition(ServiceInstance instance) { + return new DefaultServiceDefinition( + instance.getServiceId(), + instance.getHost(), + instance.getPort(), + instance.getMetadata() + ); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.java b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.java new file mode 100644 index 0000000..eab3441 --- /dev/null +++ b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.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.spring.cloud; + +import org.apache.camel.cloud.ServiceLoadBalancer; +import org.apache.camel.spring.boot.cloud.CamelCloudAutoConfiguration; +import org.apache.camel.spring.boot.cloud.CamelCloudConfigurationProperties; +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.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(CamelSpringCloudServiceLoadBalancerAutoConfiguration.LoadBalancerCondition.class) +public class CamelSpringCloudServiceLoadBalancerAutoConfiguration { + + @Bean(name = "load-balancer") + @ConditionalOnMissingBean + public ServiceLoadBalancer cloudLoadBalancer(LoadBalancerClient loadBalancerClient) { + return new CamelSpringCloudServiceLoadBalancer(loadBalancerClient); + } + + // ******************************* + // Condition + // ******************************* + + public static class LoadBalancerCondition extends GroupCondition { + public LoadBalancerCondition() { + super( + "camel.cloud", + "camel.cloud.load-balancer" + ); + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories ---------------------------------------------------------------------- diff --git a/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories b/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories index fc59127..9de8f8b 100644 --- a/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories +++ b/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories @@ -16,4 +16,4 @@ # org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.apache.camel.spring.cloud.CamelSpringCloudLoadBalancerAutoConfiguration +org.apache.camel.spring.cloud.CamelSpringCloudServiceLoadBalancerAutoConfiguration http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java index ed60528..556277e 100644 --- a/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java +++ b/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java @@ -20,7 +20,7 @@ import org.apache.camel.impl.cloud.ServiceCallConstants; import org.apache.camel.model.cloud.AggregatingServiceCallServiceDiscoveryConfiguration; import org.apache.camel.model.cloud.BlacklistServiceCallServiceFilterConfiguration; import org.apache.camel.model.cloud.ChainedServiceCallServiceFilterConfiguration; -import org.apache.camel.model.cloud.DefaultServiceCallLoadBalancerConfiguration; +import org.apache.camel.model.cloud.DefaultServiceCallServiceLoadBalancerConfiguration; import org.apache.camel.model.cloud.HealthyServiceCallServiceFilterConfiguration; import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition; import org.apache.camel.model.cloud.ServiceCallExpressionConfiguration; @@ -49,7 +49,7 @@ public class ServiceCallConfigurationTest { assertNotNull("No ServiceCallConfiguration (1)", conf); assertNotNull("No ServiceDiscoveryConfiguration (1)", conf.getServiceDiscoveryConfiguration()); assertNotNull("No ServiceCallLoadBalancerConfiguration (1)", conf.getLoadBalancerConfiguration()); - assertTrue(conf.getLoadBalancerConfiguration() instanceof DefaultServiceCallLoadBalancerConfiguration); + assertTrue(conf.getLoadBalancerConfiguration() instanceof DefaultServiceCallServiceLoadBalancerConfiguration); ServiceCallExpressionConfiguration expConf1 = conf.getExpressionConfiguration(); assertNull(expConf1.getExpression()); http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java deleted file mode 100644 index d25dc3d..0000000 --- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * 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.model.cloud.springboot; - -import java.util.Map; -import javax.annotation.Generated; - -/** - * Generated by camel-package-maven-plugin - do not edit this file! - */ -@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo") -public class RibbonServiceCallLoadBalancerConfigurationCommon { - - /** - * The namespace - */ - private String namespace; - /** - * The username - */ - private String username; - /** - * The password - */ - private String password; - /** - * Sets the Ribbon client name - */ - private String clientName; - /** - * Set client properties to use. These properties are specific to what - * service call implementation are in use. For example if using ribbon then - * the client properties are define in - * com.netflix.client.config.CommonClientConfigKey. - */ - private Map<String, String> properties; - - public String getNamespace() { - return namespace; - } - - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getClientName() { - return clientName; - } - - public void setClientName(String clientName) { - this.clientName = clientName; - } - - public Map<String, String> getProperties() { - return properties; - } - - public void setProperties(Map<String, String> properties) { - this.properties = properties; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java deleted file mode 100644 index d0f230a..0000000 --- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * 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.model.cloud.springboot; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import org.springframework.boot.context.properties.ConfigurationProperties; - -@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo") -@ConfigurationProperties(prefix = "camel.cloud.ribbon.load-balancer") -public class RibbonServiceCallLoadBalancerConfigurationProperties - extends - RibbonServiceCallLoadBalancerConfigurationCommon { - - /** - * Enable the component - */ - private boolean enabled = true; - /** - * Define additional configuration definitions - */ - private Map<String, RibbonServiceCallLoadBalancerConfigurationCommon> configurations = new HashMap<>(); - - public Map<String, RibbonServiceCallLoadBalancerConfigurationCommon> getConfigurations() { - return configurations; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java new file mode 100644 index 0000000..ba78f35 --- /dev/null +++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java @@ -0,0 +1,91 @@ +/** + * 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.model.cloud.springboot; + +import java.util.Map; +import javax.annotation.Generated; + +/** + * Generated by camel-package-maven-plugin - do not edit this file! + */ +@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo") +public class RibbonServiceCallServiceLoadBalancerConfigurationCommon { + + /** + * The namespace + */ + private String namespace; + /** + * The username + */ + private String username; + /** + * The password + */ + private String password; + /** + * Sets the Ribbon client name + */ + private String clientName; + /** + * Set client properties to use. These properties are specific to what + * service call implementation are in use. For example if using ribbon then + * the client properties are define in + * com.netflix.client.config.CommonClientConfigKey. + */ + private Map<String, String> properties; + + public String getNamespace() { + return namespace; + } + + public void setNamespace(String namespace) { + this.namespace = namespace; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getClientName() { + return clientName; + } + + public void setClientName(String clientName) { + this.clientName = clientName; + } + + public Map<String, String> getProperties() { + return properties; + } + + public void setProperties(Map<String, String> properties) { + this.properties = properties; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java new file mode 100644 index 0000000..a670bf6 --- /dev/null +++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java @@ -0,0 +1,50 @@ +/** + * 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.model.cloud.springboot; + +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo") +@ConfigurationProperties(prefix = "camel.cloud.ribbon.load-balancer") +public class RibbonServiceCallServiceLoadBalancerConfigurationProperties + extends + RibbonServiceCallServiceLoadBalancerConfigurationCommon { + + /** + * Enable the component + */ + private boolean enabled = true; + /** + * Define additional configuration definitions + */ + private Map<String, RibbonServiceCallServiceLoadBalancerConfigurationCommon> configurations = new HashMap<>(); + + public Map<String, RibbonServiceCallServiceLoadBalancerConfigurationCommon> getConfigurations() { + return configurations; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml b/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml index 24aba7b..6295637 100644 --- a/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml +++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml @@ -55,5 +55,10 @@ <artifactId>camel-spring-boot-starter</artifactId> </dependency> <!--END OF GENERATED CODE--> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-jetty</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java index 8a58108..0135e07 100644 --- a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java +++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java @@ -21,10 +21,10 @@ import java.util.Map; import javax.annotation.PostConstruct; import org.apache.camel.CamelContext; -import org.apache.camel.cloud.LoadBalancer; -import org.apache.camel.component.ribbon.cloud.RibbonLoadBalancerFactory; -import org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationCommon; -import org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationProperties; +import org.apache.camel.cloud.ServiceLoadBalancer; +import org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory; +import org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationCommon; +import org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationProperties; import org.apache.camel.spring.boot.CamelAutoConfiguration; import org.apache.camel.spring.boot.util.GroupCondition; import org.apache.camel.util.IntrospectionSupport; @@ -44,20 +44,20 @@ import org.springframework.context.annotation.Lazy; @ConditionalOnBean(CamelAutoConfiguration.class) @Conditional(RibbonCloudAutoConfiguration.Condition.class) @AutoConfigureAfter(CamelAutoConfiguration.class) -@EnableConfigurationProperties(RibbonServiceCallLoadBalancerConfigurationProperties.class) +@EnableConfigurationProperties(RibbonServiceCallServiceLoadBalancerConfigurationProperties.class) public class RibbonCloudAutoConfiguration { @Autowired private CamelContext camelContext; @Autowired - private RibbonServiceCallLoadBalancerConfigurationProperties configuration; + private RibbonServiceCallServiceLoadBalancerConfigurationProperties configuration; @Autowired private ConfigurableBeanFactory beanFactory; @Lazy @Bean(name = "ribbon-load-balancer") @ConditionalOnClass(CamelContext.class) - public LoadBalancer configureLoadBalancerFactory() throws Exception { - RibbonLoadBalancerFactory factory = new RibbonLoadBalancerFactory(); + public ServiceLoadBalancer configureLoadBalancerFactory() throws Exception { + RibbonServiceLoadBalancerFactory factory = new RibbonServiceLoadBalancerFactory(); IntrospectionSupport.setProperties( camelContext, @@ -73,12 +73,12 @@ public class RibbonCloudAutoConfiguration { if (beanFactory != null) { Map<String, Object> parameters = new HashMap<>(); - for (Map.Entry<String, RibbonServiceCallLoadBalancerConfigurationCommon> entry : configuration.getConfigurations().entrySet()) { + for (Map.Entry<String, RibbonServiceCallServiceLoadBalancerConfigurationCommon> entry : configuration.getConfigurations().entrySet()) { // clean up params parameters.clear(); // The instance factory - RibbonLoadBalancerFactory factory = new RibbonLoadBalancerFactory(); + RibbonServiceLoadBalancerFactory factory = new RibbonServiceLoadBalancerFactory(); try { IntrospectionSupport.getProperties(entry.getValue(), parameters, null, false); http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java index e2e322f..082a8aa 100644 --- a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java +++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java @@ -18,8 +18,8 @@ package org.apache.camel.component.ribbon.springboot.cloud; import java.util.Map; -import org.apache.camel.cloud.LoadBalancer; -import org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationProperties; +import org.apache.camel.cloud.ServiceLoadBalancer; +import org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationProperties; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,10 +50,10 @@ public class RibbonLoadBalancerDisabledTest { public void testConfiguration() throws Exception { Map<String, ?> beans; - beans = context.getBeansOfType(RibbonServiceCallLoadBalancerConfigurationProperties.class); + beans = context.getBeansOfType(RibbonServiceCallServiceLoadBalancerConfigurationProperties.class); Assert.assertTrue(beans.isEmpty()); - beans = context.getBeansOfType(LoadBalancer.class); + beans = context.getBeansOfType(ServiceLoadBalancer.class); Assert.assertTrue(beans.isEmpty()); Assert.assertFalse(beans.containsKey("ribbon-load-balancer")); } http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java index b7e2780..9a25722 100644 --- a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java +++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java @@ -18,8 +18,8 @@ package org.apache.camel.component.ribbon.springboot.cloud; import java.util.Map; -import org.apache.camel.cloud.LoadBalancer; -import org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationProperties; +import org.apache.camel.cloud.ServiceLoadBalancer; +import org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationProperties; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,11 +50,11 @@ public class RibbonLoadBalancerEnabledTest { public void testConfiguration() throws Exception { Map<String, ?> beans; - beans = context.getBeansOfType(RibbonServiceCallLoadBalancerConfigurationProperties.class); + beans = context.getBeansOfType(RibbonServiceCallServiceLoadBalancerConfigurationProperties.class); Assert.assertFalse(beans.isEmpty()); Assert.assertEquals(1, beans.size()); - beans = context.getBeansOfType(LoadBalancer.class); + beans = context.getBeansOfType(ServiceLoadBalancer.class); Assert.assertFalse(beans.isEmpty()); Assert.assertTrue(beans.containsKey("ribbon-load-balancer")); } http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java new file mode 100644 index 0000000..c021b00 --- /dev/null +++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java @@ -0,0 +1,124 @@ +/** + * 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.component.ribbon.springboot.cloud; + +import java.util.Optional; + +import org.apache.camel.CamelContext; +import org.apache.camel.Navigate; +import org.apache.camel.Processor; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.Route; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancer; +import org.apache.camel.impl.cloud.DefaultServiceCallProcessor; +import org.apache.camel.spring.boot.cloud.CamelCloudServiceDiscovery; +import org.apache.camel.spring.boot.cloud.CamelCloudServiceFilter; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@DirtiesContext +@SpringBootApplication +@SpringBootTest( + classes = { + RibbonLoadBalancerTest.TestConfiguration.class + }, + properties = { + "debug=false", + "camel.cloud.service-discovery.services[myService]=localhost:9090,localhost:9091", + "camel.cloud.ribbon.load-balancer.enabled=true" +}) +public class RibbonLoadBalancerTest { + @Autowired + private CamelContext context; + @Autowired + private ProducerTemplate template; + + @Test + public void testLoadBalancer() throws Exception { + DefaultServiceCallProcessor processor = findServiceCallProcessor(); + + Assert.assertNotNull(processor.getLoadBalancer()); + Assert.assertTrue(processor.getLoadBalancer() instanceof RibbonServiceLoadBalancer); + + RibbonServiceLoadBalancer loadBalancer = (RibbonServiceLoadBalancer)processor.getLoadBalancer(); + Assert.assertTrue(loadBalancer.getServiceDiscovery() instanceof CamelCloudServiceDiscovery); + Assert.assertTrue(loadBalancer.getServiceFilter() instanceof CamelCloudServiceFilter); + + Assert.assertEquals("9091", template.requestBody("direct:start", null, String.class)); + Assert.assertEquals("9090", template.requestBody("direct:start", null, String.class)); + } + + @Configuration + public static class TestConfiguration { + @Bean + public RoutesBuilder routeBuilder() { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start") + .routeId("scall") + .serviceCall() + .name("myService") + .uri("jetty:http://myService") + .end(); + from("jetty:http://localhost:9090").routeId("9090") + .transform().constant("9090"); + from("jetty:http://localhost:9091").routeId("9091") + .transform().constant("9091"); + } + }; + } + } + + // ************************************ + // Helpers + // ************************************ + + protected DefaultServiceCallProcessor findServiceCallProcessor() { + Route route = context.getRoute("scall"); + + Assert.assertNotNull("ServiceCall Route should be present", route); + + return findServiceCallProcessor(route.navigate()) + .orElseThrow(() -> new IllegalStateException("Unable to find a ServiceCallProcessor")); + } + + protected Optional<DefaultServiceCallProcessor> findServiceCallProcessor(Navigate<Processor> navigate) { + for (Processor processor : navigate.next()) { + if (processor instanceof DefaultServiceCallProcessor) { + return Optional.ofNullable((DefaultServiceCallProcessor)processor); + } + + if (processor instanceof Navigate) { + return findServiceCallProcessor((Navigate<Processor>)processor); + } + } + + return Optional.empty(); + } +}