This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git
commit 9227e979379e7609931e059abe0005739bc9b845 Author: CMonkey <[email protected]> AuthorDate: Fri Jul 5 15:53:21 2019 +0800 add omega/omega-spring-cloud-nacos-starter module --- omega/omega-spring-cloud-nacos-starter/pom.xml | 51 +++++++++++ .../cloud/OmegaSpringNacosAutoConfiguration.java | 28 ++++++ .../omega/spring/cloud/OmegaSpringNacosConfig.java | 101 +++++++++++++++++++++ .../src/main/resources/META-INF/spring.factories | 17 ++++ 4 files changed, 197 insertions(+) diff --git a/omega/omega-spring-cloud-nacos-starter/pom.xml b/omega/omega-spring-cloud-nacos-starter/pom.xml new file mode 100644 index 0000000..3448abc --- /dev/null +++ b/omega/omega-spring-cloud-nacos-starter/pom.xml @@ -0,0 +1,51 @@ +<?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/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>omega</artifactId> + <groupId>org.apache.servicecomb.pack</groupId> + <version>0.5.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>omega-spring-cloud-nacos-starter</artifactId> + <name>Pack::Omega::Spring Cloud Nacos Starter</name> + + <dependencies> + <dependency> + <groupId>org.apache.servicecomb.pack</groupId> + <artifactId>omega-spring-tx</artifactId> + </dependency> + <dependency> + <groupId>org.apache.servicecomb.pack</groupId> + <artifactId>omega-format</artifactId> + </dependency> + <dependency> + <groupId>org.apache.servicecomb.pack</groupId> + <artifactId>omega-connector-grpc</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> + </dependency> + </dependencies> + +</project> diff --git a/omega/omega-spring-cloud-nacos-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/cloud/OmegaSpringNacosAutoConfiguration.java b/omega/omega-spring-cloud-nacos-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/cloud/OmegaSpringNacosAutoConfiguration.java new file mode 100644 index 0000000..ad51986 --- /dev/null +++ b/omega/omega-spring-cloud-nacos-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/cloud/OmegaSpringNacosAutoConfiguration.java @@ -0,0 +1,28 @@ +/* + * 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.servicecomb.pack.omega.spring.cloud; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import(OmegaSpringNacosConfig.class) +@ConditionalOnProperty(value = {"omega.enabled"}, matchIfMissing = true) +public class OmegaSpringNacosAutoConfiguration { +} diff --git a/omega/omega-spring-cloud-nacos-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/cloud/OmegaSpringNacosConfig.java b/omega/omega-spring-cloud-nacos-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/cloud/OmegaSpringNacosConfig.java new file mode 100644 index 0000000..6007464 --- /dev/null +++ b/omega/omega-spring-cloud-nacos-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/cloud/OmegaSpringNacosConfig.java @@ -0,0 +1,101 @@ +/* + * 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. + */ + +/** + * Get the access address of Alpah Server from Nacos Server + * Turn this feautre on by set alpha.cluster.register.type=nacos + * First omega gets the Alpha address from Nacos with ${alpha.cluster.serviceId} + * If omega can't get it in Nacos then use ${alpha.cluster.address} + */ + +package org.apache.servicecomb.pack.omega.spring.cloud; + +import org.apache.servicecomb.pack.omega.connector.grpc.AlphaClusterDiscovery; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Configuration +@ConditionalOnProperty(value = {"alpha.cluster.register.type"}, havingValue = "nacos") +@AutoConfigureAfter(value = {NacosDiscoveryAutoConfiguration.class}) +class OmegaSpringNacosConfig { + + private static final Logger LOG = LoggerFactory.getLogger(OmegaSpringNacosConfig.class); + + @Autowired + public DiscoveryClient discoveryClient; + + @Bean + AlphaClusterDiscovery alphaClusterAddress( + @Value("${alpha.cluster.serviceId:servicecomb-alpha-server}") String serviceId, + @Value("${alpha.cluster.address:0.0.0.0:8080}") String[] addresses) { + StringBuffer serviceUrls = new StringBuffer(); + + String[] alphaAddresses = this.getAlphaAddress(serviceId); + + LOG.info("alphaAddress = {}", Arrays.toString(alphaAddresses)); + + if (alphaAddresses.length > 0) { + AlphaClusterDiscovery alphaClusterDiscovery = AlphaClusterDiscovery.builder() + .discoveryType(AlphaClusterDiscovery.DiscoveryType.ZOOKEEPER) + .discoveryInfo(serviceUrls.toString()) + .addresses(alphaAddresses) + .build(); + return alphaClusterDiscovery; + } else { + AlphaClusterDiscovery alphaClusterDiscovery = AlphaClusterDiscovery.builder() + .discoveryType(AlphaClusterDiscovery.DiscoveryType.DEFAULT) + .addresses(addresses) + .build(); + return alphaClusterDiscovery; + } + } + + private String[] getAlphaAddress(String serviceId) { + List<String> alphaAddresses = new ArrayList<>(); + List<ServiceInstance> serviceInstances = discoveryClient.getInstances(serviceId); + boolean foundAlphaServer = Boolean.FALSE; + for (ServiceInstance serviceInstance : serviceInstances) { + foundAlphaServer = Boolean.TRUE; + if (serviceInstance.getMetadata().containsKey(serviceId)) { + String alphaAddress = serviceInstance.getMetadata().get(serviceId); + alphaAddresses.add(alphaAddress); + } + } + if (foundAlphaServer) { + if (alphaAddresses.size() == 0) { + LOG.warn("Alpha has been found in Nacos, " + + "but Alpha's registered address information is not found in Nacos instance metadata. " + + "Please check Alpha is configured spring.profiles.active=spring-cloud"); + } + } else { + LOG.warn("No Alpha Server {} found in the Nacos", serviceId); + } + return alphaAddresses.toArray(new String[alphaAddresses.size()]); + } +} diff --git a/omega/omega-spring-cloud-nacos-starter/src/main/resources/META-INF/spring.factories b/omega/omega-spring-cloud-nacos-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..a276d59 --- /dev/null +++ b/omega/omega-spring-cloud-nacos-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,17 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- +org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.apache.servicecomb.pack.omega.spring.cloud.OmegaSpringNacosAutoConfiguration
