Skip to content

Commit

Permalink
Enhanced for Nacos weight configuration (#1406)
Browse files Browse the repository at this point in the history
Co-authored-by: 呈铭 <beck.wcm@antgroup.com>
  • Loading branch information
wangchengming666 and 呈铭 authored Mar 28, 2024
1 parent e67ea54 commit a97d72c
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,13 @@ static List<ProviderInfo> convertInstancesToProviders(List<Instance> allInstance
for (Instance instance : allInstances) {
String url = convertInstanceToUrl(instance);
ProviderInfo providerInfo = ProviderHelper.toProviderInfo(url);

// Nacos的默认权重为1.0
// 当Nacos默认权重传入1.0,根据代码逻辑计算结果为100,与sofa-rpc默认权重一致
// 因为是接口级别,如果不同的服务具有不同的权重也不会出现被覆盖或者冲突的情况
long weight = Math.round(providerInfo.getWeight() * instance.getWeight());
providerInfo.setWeight(Math.round(weight));

providerInfos.add(providerInfo);
}
return providerInfos;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,61 @@ public void buildServiceName() {
serviceName = NacosRegistryHelper.buildServiceName(provider, RpcConstants.PROTOCOL_TYPE_REST);
assertEquals(serviceName, "com.alipay.xxx.TestService:nacos-test:" + RpcConstants.PROTOCOL_TYPE_REST);
}
}

@Test
public void testNacosWeight() {
Instance instance = new Instance();
instance.setClusterName(NacosRegistryHelper.DEFAULT_CLUSTER);
instance.setIp("1.1.1.1");
instance.setPort(12200);
instance.setServiceName("com.alipay.xxx.TestService");
instance.setWeight(0.99D);

List<ProviderInfo> providerInfos = NacosRegistryHelper
.convertInstancesToProviders(Lists.newArrayList(instance));
assertNotNull(providerInfos);
assertEquals(1, providerInfos.size());

ProviderInfo providerInfo = providerInfos.get(0);
assertNotNull(providerInfo);
assertEquals(99, providerInfo.getWeight());
}

@Test
public void testNacosWeightLessThan0() {
Instance instance = new Instance();
instance.setClusterName(NacosRegistryHelper.DEFAULT_CLUSTER);
instance.setIp("1.1.1.1");
instance.setPort(12200);
instance.setServiceName("com.alipay.xxx.TestService");
instance.setWeight(-0.1D);

List<ProviderInfo> providerInfos = NacosRegistryHelper
.convertInstancesToProviders(Lists.newArrayList(instance));
assertNotNull(providerInfos);
assertEquals(1, providerInfos.size());

ProviderInfo providerInfo = providerInfos.get(0);
assertNotNull(providerInfo);
assertEquals(-10, providerInfo.getWeight());
}

@Test
public void testNacosWeightWith0() {
Instance instance = new Instance();
instance.setClusterName(NacosRegistryHelper.DEFAULT_CLUSTER);
instance.setIp("1.1.1.1");
instance.setPort(12200);
instance.setServiceName("com.alipay.xxx.TestService");
instance.setWeight(0.0D);

List<ProviderInfo> providerInfos = NacosRegistryHelper
.convertInstancesToProviders(Lists.newArrayList(instance));
assertNotNull(providerInfos);
assertEquals(1, providerInfos.size());

ProviderInfo providerInfo = providerInfos.get(0);
assertNotNull(providerInfo);
assertEquals(0, providerInfo.getWeight());
}
}

0 comments on commit a97d72c

Please sign in to comment.