From 65fd0ebeca7dbc02cab8b9cd5b8275e4b4933ad6 Mon Sep 17 00:00:00 2001 From: theonefx Date: Thu, 18 Mar 2021 11:11:42 +0800 Subject: [PATCH] Adapt to the latest implementation --- .../cloud/sentinel/feign/SentinelFeign.java | 7 +--- .../consul/SidecarConsulAutoRegistration.java | 38 +++++++++++++++++-- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java index 36caace1..2624aae6 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java @@ -84,12 +84,9 @@ public final class SentinelFeign { BeanDefinition def = gctx.getBeanDefinition(target.type().getName()); /** - * TODO - * 由于初始化顺序发生变更,这里为了避免循环依赖,只能通过 BeanDefinition 的方式获得 FeignClientFactoryBean - * 需要重点review + * Due to the change of the initialization sequence, BeanFactory.getBean will cause a circular dependency. + * So FeignClientFactoryBean can only be obtained from BeanDefinition */ -// FeignClientFactoryBean feignClientFactoryBean = (FeignClientFactoryBean) Builder.this.applicationContext -// .getBean(FACTORY_BEAN_PREFIX + target.type().getName()); FeignClientFactoryBean feignClientFactoryBean = (FeignClientFactoryBean) def.getAttribute("feignClientsRegistrarFactoryBean"); Class fallback = feignClientFactoryBean.getFallback(); diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/consul/SidecarConsulAutoRegistration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/consul/SidecarConsulAutoRegistration.java index ecb51e17..f03c4b31 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/consul/SidecarConsulAutoRegistration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/consul/SidecarConsulAutoRegistration.java @@ -16,7 +16,10 @@ package com.alibaba.cloud.sidecar.consul; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import com.alibaba.cloud.sidecar.SidecarProperties; import com.ecwid.consul.v1.agent.model.NewService; @@ -29,6 +32,8 @@ import org.springframework.cloud.consul.serviceregistry.ConsulManagementRegistra import org.springframework.cloud.consul.serviceregistry.ConsulRegistrationCustomizer; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; /** * @author www.itmuch.com @@ -59,12 +64,13 @@ public class SidecarConsulAutoRegistration extends ConsulAutoRegistration { service.setAddress(sidecarProperties.getIp()); } service.setName(normalizeForDns(appName)); - service.setTags(properties.getTags()); + service.setTags(new ArrayList<>(properties.getTags())); + service.setEnableTagOverride(properties.getEnableTagOverride()); + service.setMeta(getMetadata(properties)); // set health check, use alibaba sidecar self's port rather than polyglot app's // port. - service.setPort( - Integer.valueOf(context.getEnvironment().getProperty("server.port"))); + service.setPort(Integer.valueOf(context.getEnvironment().getProperty("server.port"))); setCheck(service, autoServiceRegistrationProperties, properties, context, heartbeatProperties); @@ -77,6 +83,32 @@ public class SidecarConsulAutoRegistration extends ConsulAutoRegistration { return registration; } + /** + * copyed from org.springframework.cloud.consul.serviceregistry.ConsulAutoRegistration#getMetadata + */ + private static Map getMetadata(ConsulDiscoveryProperties properties) { + LinkedHashMap metadata = new LinkedHashMap<>(); + if (!CollectionUtils.isEmpty(properties.getMetadata())) { + metadata.putAll(properties.getMetadata()); + } + + // add metadata from other properties. See createTags above. + if (!StringUtils.isEmpty(properties.getInstanceZone())) { + metadata.put(properties.getDefaultZoneMetadataName(), + properties.getInstanceZone()); + } + if (!StringUtils.isEmpty(properties.getInstanceGroup())) { + metadata.put("group", properties.getInstanceGroup()); + } + + // store the secure flag in the tags so that clients will be able to figure + // out whether to use http or https automatically + metadata.put("secure", + Boolean.toString(properties.getScheme().equalsIgnoreCase("https"))); + + return metadata; + } + public static String getInstanceId(SidecarProperties sidecarProperties, Environment environment) { return String.format("%s-%s-%s",