diff --git a/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/GreetingServiceConsumer.java b/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/GreetingServiceConsumer.java index 1ce7f7d..da7b4d7 100644 --- a/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/GreetingServiceConsumer.java +++ b/dubbo-examples/dubbo-discovery-example/dubbo-quick-consumer/src/main/java/com/tencent/polaris/dubbo/discovery/example/consumer/GreetingServiceConsumer.java @@ -25,10 +25,10 @@ @Component("annotatedConsumer") public class GreetingServiceConsumer { - @DubboReference(version = "1.0.0") + @DubboReference(loadbalance = "roundrobin") private GreetingService greetingService; - @DubboReference(version = "1.0.0", providedBy = "dubbo-quickstart-provider") + @DubboReference(version = "1.0.0") private EchoService echoService; public String doSayHello(String name) { diff --git a/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/src/main/java/com/tencent/polaris/dubbo/discovery/example/provider/AnnotatedGreetingService.java b/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/src/main/java/com/tencent/polaris/dubbo/discovery/example/provider/AnnotatedGreetingService.java index 9a5c4ea..7fd027f 100644 --- a/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/src/main/java/com/tencent/polaris/dubbo/discovery/example/provider/AnnotatedGreetingService.java +++ b/dubbo-examples/dubbo-discovery-example/dubbo-quick-provider/src/main/java/com/tencent/polaris/dubbo/discovery/example/provider/AnnotatedGreetingService.java @@ -20,16 +20,18 @@ import com.tencent.polaris.dubbo.example.api.GreetingService; import org.apache.dubbo.config.annotation.DubboService; -@DubboService(version = "1.0.0") +@DubboService public class AnnotatedGreetingService implements GreetingService { public String sayHello(String name) { - return "hello, " + name; + String port = System.getProperty("dubbo.protocol.port"); + return "hello, " + name + ", port: " + port; } @Override public String sayHi(String name) { - return "[provider by polaris] hi, " + name; + String port = System.getProperty("dubbo.protocol.port"); + return "[provider by polaris] hi, " + name + ", port: " + port; } } diff --git a/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java b/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java index a181f79..6d8e316 100644 --- a/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java +++ b/dubbo-plugins/dubbo-metadatareport-polaris/src/main/java/com/tencent/polaris/dubbo/metadata/report/PolarisMetadataReport.java @@ -33,6 +33,7 @@ import com.tencent.polaris.common.registry.PolarisOperators; import com.tencent.polaris.common.utils.Consts; import com.tencent.polaris.specification.api.v1.service.manage.ServiceContractProto; +import java.util.stream.Collectors; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.config.configcenter.ConfigItem; import org.apache.dubbo.common.utils.ConcurrentHashSet; @@ -82,6 +83,7 @@ public class PolarisMetadataReport extends AbstractMetadataReport { this.another = MultiReportUtil.buildAnother(applicationModel, url); } + // 保存应用的元数据 @Override protected void doStoreProviderMetadata(MetadataIdentifier providerMetadataIdentifier, String serviceDefinitions) { reportServiceContract(toDescriptor(providerMetadataIdentifier, serviceDefinitions)); @@ -255,22 +257,40 @@ private boolean reportServiceContract(ReportServiceContractRequest req) { */ @Override public boolean registerServiceAppMapping(String serviceKey, String application, URL url) { - // TODO 顺序调整 + // 直接上报mapping数据会导致提供相同接口的其他应用的mapping数据被覆写。 + // 这里应该是追加写入应用-接口mapping数据。 + // 1. 先获取初始mapping,过滤掉当前serviceKey对应的mapping another.ifPresent(proxyReport -> proxyReport.getMetadataReport().registerServiceAppMapping(serviceKey, application, url)); - + GetServiceContractRequest getServiceContractRequest = new GetServiceContractRequest(); + getServiceContractRequest.setName(formatMappingName(serviceKey)); + getServiceContractRequest.setService(""); + getServiceContractRequest.setVersion(""); + Optional result = getServiceContract(getServiceContractRequest); + List descriptors = result + .map(ServiceContractProto.ServiceContract::getInterfacesList) + .orElse(Collections.emptyList()) + .stream() + .filter(descriptor -> !descriptor.getName().equals(application)) + .map(descriptor -> { + InterfaceDescriptor interfaceDescriptor = new InterfaceDescriptor(); + interfaceDescriptor.setName(descriptor.getName()); + interfaceDescriptor.setPath(descriptor.getPath()); + interfaceDescriptor.setMethod(descriptor.getMethod()); + interfaceDescriptor.setContent(descriptor.getContent()); + return interfaceDescriptor; + }) + .collect(Collectors.toList()); + // 2. 再添加当前serviceKey对应的mapping ReportServiceContractRequest request = new ReportServiceContractRequest(); request.setName(formatMappingName(serviceKey)); request.setService(""); request.setVersion(""); - - List descriptors = new ArrayList<>(); InterfaceDescriptor descriptor = new InterfaceDescriptor(); descriptor.setName(application); descriptor.setPath(application); descriptor.setContent(application); descriptor.setMethod(""); descriptors.add(descriptor); - request.setInterfaceDescriptors(descriptors); return reportServiceContract(request); } diff --git a/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java b/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java index ad2b29a..ad36e49 100644 --- a/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java +++ b/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisRegistry.java @@ -73,7 +73,7 @@ public void doRegister(URL url) { int port = url.getPort(); if (port > 0) { int weight = url.getParameter(Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT); - String version = url.getParameter(CommonConstants.VERSION_KEY, "1.0.0"); + String version = url.getParameter(CommonConstants.VERSION_KEY); polarisOperator.register(url.getServiceInterface(), url.getHost(), port, url.getProtocol(), version, weight, metadata); registeredInstances.add(url); diff --git a/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java b/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java index d261793..3b13f22 100644 --- a/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java +++ b/dubbo-plugins/dubbo-registry-polaris/src/main/java/com/tencent/polaris/dubbo/registry/PolarisServiceDiscovery.java @@ -73,8 +73,7 @@ protected void doRegister(ServiceInstance instance) throws RuntimeException { metadata = new HashMap<>(); } metadata.replaceAll((s, s2) -> StringUtils.defaultString(s2)); - String version = instance.getMetadata(Consts.INSTANCE_VERSION, Consts.DEFAULT_VERSION); - Context.saveToGlobal(Consts.INSTANCE_VERSION, version); + String version = instance.getMetadata(Consts.INSTANCE_VERSION); operator.register( serviceName, instance.getHost(), diff --git a/polaris-adapter-dubbo/src/main/resources/polaris.yml b/polaris-adapter-dubbo/src/main/resources/polaris.yml new file mode 100644 index 0000000..7b83bff --- /dev/null +++ b/polaris-adapter-dubbo/src/main/resources/polaris.yml @@ -0,0 +1,8 @@ +consumer: + serviceRouter: + plugin: + recoverRouter: + # 是否剔除被熔断的实例 + excludeCircuitBreakInstances: false + # 关闭全死全活 + allRecoverEnable: false \ No newline at end of file