Skip to content

Commit b1b354c

Browse files
fix: lossless plugin log support ns (#1244)
Co-authored-by: shedfreewu <[email protected]>
1 parent 4c7a9c8 commit b1b354c

File tree

9 files changed

+228
-9
lines changed

9 files changed

+228
-9
lines changed

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/pom.xml

+8-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,14 @@
5555
<dependency>
5656
<groupId>com.tencent.cloud</groupId>
5757
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
58-
<scope>test</scope>
58+
<optional>true</optional>
59+
</dependency>
60+
61+
<dependency>
62+
<groupId>com.alibaba.cloud</groupId>
63+
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
64+
<version>2.2.9.RELEASE</version>
65+
<optional>true</optional>
5966
</dependency>
6067

6168
<dependency>

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/LosslessRegistryAspect.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.tencent.cloud.plugin.lossless;
1919

2020
import com.tencent.cloud.plugin.lossless.config.LosslessProperties;
21+
import com.tencent.cloud.plugin.lossless.transfomer.DiscoveryNamespaceGetter;
2122
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
2223
import com.tencent.polaris.api.pojo.BaseInstance;
2324
import org.aspectj.lang.ProceedingJoinPoint;
@@ -44,12 +45,16 @@ public class LosslessRegistryAspect {
4445

4546
private PolarisSDKContextManager polarisSDKContextManager;
4647

48+
private DiscoveryNamespaceGetter discoveryNamespaceGetter;
49+
4750
public LosslessRegistryAspect(ServiceRegistry serviceRegistry, Registration registration,
48-
LosslessProperties losslessProperties, PolarisSDKContextManager polarisSDKContextManager) {
51+
LosslessProperties losslessProperties, PolarisSDKContextManager polarisSDKContextManager,
52+
DiscoveryNamespaceGetter discoveryNamespaceGetter) {
4953
this.serviceRegistry = serviceRegistry;
5054
this.registration = registration;
5155
this.losslessProperties = losslessProperties;
5256
this.polarisSDKContextManager = polarisSDKContextManager;
57+
this.discoveryNamespaceGetter = discoveryNamespaceGetter;
5358
}
5459

5560
@Pointcut("execution(public * org.springframework.cloud.client.serviceregistry.ServiceRegistry.register(..))")
@@ -66,7 +71,7 @@ public void deregisterPointcut() {
6671
public Object invokeRegister(ProceedingJoinPoint joinPoint) throws Throwable {
6772

6873
// web started, get port from registration
69-
BaseInstance instance = SpringCloudLosslessActionProvider.getBaseInstance(registration);
74+
BaseInstance instance = SpringCloudLosslessActionProvider.getBaseInstance(registration, discoveryNamespaceGetter);
7075

7176
Runnable registerAction = () -> executeJoinPoint(joinPoint);
7277

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/SpringCloudLosslessActionProvider.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.tencent.cloud.common.util.OkHttpUtil;
2424
import com.tencent.cloud.plugin.lossless.config.LosslessProperties;
25+
import com.tencent.cloud.plugin.lossless.transfomer.DiscoveryNamespaceGetter;
2526
import com.tencent.polaris.api.plugin.lossless.InstanceProperties;
2627
import com.tencent.polaris.api.plugin.lossless.LosslessActionProvider;
2728
import com.tencent.polaris.api.pojo.BaseInstance;
@@ -88,13 +89,16 @@ public boolean doHealthCheck() {
8889
losslessProperties.getHealthCheckPath(), headers);
8990
}
9091

91-
public static BaseInstance getBaseInstance(Registration registration) {
92-
return getBaseInstance(registration, registration.getPort());
92+
public static BaseInstance getBaseInstance(Registration registration, DiscoveryNamespaceGetter namespaceGetter) {
93+
return getBaseInstance(registration, registration.getPort(), namespaceGetter);
9394
}
9495

95-
public static BaseInstance getBaseInstance(Registration registration, Integer port) {
96-
// for common spring cloud registration, not set namespace
96+
public static BaseInstance getBaseInstance(Registration registration, Integer port,
97+
DiscoveryNamespaceGetter namespaceGetter) {
9798
DefaultBaseInstance baseInstance = new DefaultBaseInstance();
99+
if (namespaceGetter != null) {
100+
baseInstance.setNamespace(namespaceGetter.getNamespace());
101+
}
98102
baseInstance.setService(registration.getServiceId());
99103
// before web start, port in registration not init
100104
baseInstance.setPort(port);

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/config/LosslessAutoConfiguration.java

+38-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,20 @@
1818

1919
package com.tencent.cloud.plugin.lossless.config;
2020

21+
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
22+
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
2123
import com.tencent.cloud.plugin.lossless.LosslessRegistryAspect;
24+
import com.tencent.cloud.plugin.lossless.transfomer.DiscoveryNamespaceGetter;
25+
import com.tencent.cloud.plugin.lossless.transfomer.NacosDiscoveryNamespaceGetter;
26+
import com.tencent.cloud.plugin.lossless.transfomer.PolarisDiscoveryNamespaceGetter;
27+
import com.tencent.cloud.polaris.PolarisDiscoveryProperties;
2228
import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled;
2329
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
30+
import com.tencent.cloud.polaris.discovery.ConditionalOnPolarisDiscoveryEnabled;
2431

32+
import org.springframework.beans.factory.annotation.Autowired;
33+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
34+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2535
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2636
import org.springframework.cloud.client.serviceregistry.Registration;
2737
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
@@ -42,7 +52,33 @@ public class LosslessAutoConfiguration {
4252
@Bean
4353
@ConditionalOnMissingBean
4454
public LosslessRegistryAspect losslessRegistryAspect(ServiceRegistry serviceRegistry, Registration registration,
45-
LosslessProperties losslessProperties, PolarisSDKContextManager polarisSDKContextManager) {
46-
return new LosslessRegistryAspect(serviceRegistry, registration, losslessProperties, polarisSDKContextManager);
55+
LosslessProperties losslessProperties, PolarisSDKContextManager polarisSDKContextManager,
56+
@Autowired(required = false) DiscoveryNamespaceGetter discoveryNamespaceGetter) {
57+
return new LosslessRegistryAspect(serviceRegistry, registration, losslessProperties, polarisSDKContextManager, discoveryNamespaceGetter);
58+
}
59+
60+
@ConditionalOnClass(name = "com.alibaba.cloud.nacos.NacosDiscoveryProperties")
61+
static class Nacos {
62+
63+
@Bean
64+
@ConditionalOnMissingBean
65+
@ConditionalOnNacosDiscoveryEnabled
66+
@ConditionalOnBean(NacosDiscoveryProperties.class)
67+
public NacosDiscoveryNamespaceGetter nacosDiscoveryNamespaceGetter(
68+
NacosDiscoveryProperties nacosDiscoveryProperties) {
69+
return new NacosDiscoveryNamespaceGetter(nacosDiscoveryProperties);
70+
}
71+
}
72+
73+
@ConditionalOnClass(name = "com.tencent.cloud.polaris.PolarisDiscoveryProperties")
74+
static class Polaris {
75+
@Bean
76+
@ConditionalOnMissingBean
77+
@ConditionalOnPolarisDiscoveryEnabled
78+
@ConditionalOnBean(PolarisDiscoveryProperties.class)
79+
public PolarisDiscoveryNamespaceGetter polarisDiscoveryNamespaceGetter(
80+
PolarisDiscoveryProperties polarisDiscoveryProperties) {
81+
return new PolarisDiscoveryNamespaceGetter(polarisDiscoveryProperties);
82+
}
4783
}
4884
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
3+
*
4+
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
5+
*
6+
* Licensed under the BSD 3-Clause License (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* https://opensource.org/licenses/BSD-3-Clause
11+
*
12+
* Unless required by applicable law or agreed to in writing, software distributed
13+
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
14+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
15+
* specific language governing permissions and limitations under the License.
16+
*/
17+
18+
package com.tencent.cloud.plugin.lossless.transfomer;
19+
20+
/**
21+
* Interface for discovery namespace getter.
22+
*
23+
* @author Shedfree Wu
24+
*/
25+
public interface DiscoveryNamespaceGetter {
26+
27+
String getNamespace();
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
3+
*
4+
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
5+
*
6+
* Licensed under the BSD 3-Clause License (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* https://opensource.org/licenses/BSD-3-Clause
11+
*
12+
* Unless required by applicable law or agreed to in writing, software distributed
13+
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
14+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
15+
* specific language governing permissions and limitations under the License.
16+
*/
17+
18+
package com.tencent.cloud.plugin.lossless.transfomer;
19+
20+
import java.lang.reflect.Method;
21+
import java.util.Properties;
22+
23+
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
24+
import com.alibaba.nacos.client.naming.utils.InitUtils;
25+
26+
import org.springframework.util.ReflectionUtils;
27+
28+
/**
29+
* Discovery namespace getter for Nacos.
30+
*
31+
* @author Shedfree Wu
32+
*/
33+
public class NacosDiscoveryNamespaceGetter implements DiscoveryNamespaceGetter {
34+
private String namespace;
35+
36+
public NacosDiscoveryNamespaceGetter(NacosDiscoveryProperties nacosDiscoveryProperties) {
37+
// getNacosProperties is private in low version of spring-cloud-starter-alibaba-nacos-discovery
38+
Method method = ReflectionUtils.findMethod(NacosDiscoveryProperties.class, "getNacosProperties");
39+
method.setAccessible(true);
40+
this.namespace = InitUtils.initNamespaceForNaming(
41+
(Properties) ReflectionUtils.invokeMethod(method, nacosDiscoveryProperties));
42+
}
43+
44+
public String getNamespace() {
45+
return namespace;
46+
}
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
3+
*
4+
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
5+
*
6+
* Licensed under the BSD 3-Clause License (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* https://opensource.org/licenses/BSD-3-Clause
11+
*
12+
* Unless required by applicable law or agreed to in writing, software distributed
13+
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
14+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
15+
* specific language governing permissions and limitations under the License.
16+
*/
17+
18+
package com.tencent.cloud.plugin.lossless.transfomer;
19+
20+
import com.tencent.cloud.polaris.PolarisDiscoveryProperties;
21+
22+
/**
23+
* Discovery namespace getter for Polaris.
24+
*
25+
* @author Shedfree Wu
26+
*/
27+
public class PolarisDiscoveryNamespaceGetter implements DiscoveryNamespaceGetter {
28+
29+
private String namespace;
30+
31+
public PolarisDiscoveryNamespaceGetter(PolarisDiscoveryProperties polarisDiscoveryProperties) {
32+
this.namespace = polarisDiscoveryProperties.getNamespace();
33+
}
34+
35+
public String getNamespace() {
36+
return namespace;
37+
}
38+
}

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/test/java/com/tencent/cloud/plugin/lossless/LosslessConfigModifierTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class LosslessConfigModifierTest {
3838

3939
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
4040
.withConfiguration(AutoConfigurations.of(TestApplication.class))
41+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
4142
.withPropertyValues("spring.cloud.polaris.enabled=true")
4243
.withPropertyValues("spring.cloud.polaris.lossless.enabled=true")
4344
.withPropertyValues("spring.cloud.polaris.lossless.port=20000")
@@ -48,6 +49,7 @@ public class LosslessConfigModifierTest {
4849
.withPropertyValues("spring.cloud.gateway.enabled=false");
4950
private final ApplicationContextRunner disabledContextRunner = new ApplicationContextRunner()
5051
.withConfiguration(AutoConfigurations.of(TestApplication.class))
52+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
5153
.withPropertyValues("spring.cloud.polaris.enabled=true")
5254
.withPropertyValues("spring.cloud.polaris.lossless.enabled=false")
5355
.withPropertyValues("spring.application.name=test")

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/test/java/com/tencent/cloud/plugin/lossless/LosslessRegistryAspectTest.java

+52
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,22 @@
1919

2020
import java.util.Collections;
2121

22+
import com.alibaba.cloud.nacos.NacosServiceAutoConfiguration;
23+
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
24+
import com.alibaba.cloud.nacos.registry.NacosRegistration;
25+
import com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration;
26+
import com.alibaba.cloud.nacos.util.UtilIPv6AutoConfiguration;
2227
import com.tencent.cloud.common.util.OkHttpUtil;
2328
import com.tencent.cloud.plugin.lossless.config.LosslessAutoConfiguration;
2429
import com.tencent.cloud.plugin.lossless.config.LosslessPropertiesBootstrapConfiguration;
30+
import com.tencent.cloud.plugin.lossless.transfomer.DiscoveryNamespaceGetter;
2531
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
2632
import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration;
2733
import com.tencent.cloud.polaris.discovery.PolarisDiscoveryAutoConfiguration;
2834
import com.tencent.cloud.polaris.discovery.PolarisDiscoveryClientConfiguration;
2935
import com.tencent.cloud.polaris.registry.PolarisRegistration;
3036
import com.tencent.cloud.polaris.registry.PolarisServiceRegistry;
37+
import com.tencent.polaris.api.pojo.BaseInstance;
3138
import com.tencent.polaris.api.pojo.ServiceKey;
3239
import com.tencent.polaris.test.mock.discovery.NamingServer;
3340
import org.junit.jupiter.api.AfterAll;
@@ -39,7 +46,10 @@
3946
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
4047
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
4148
import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration;
49+
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;
4250
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationUtils;
51+
import org.springframework.cloud.client.serviceregistry.Registration;
52+
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
4353
import org.springframework.context.annotation.Configuration;
4454

4555
import static org.assertj.core.api.Assertions.assertThat;
@@ -72,6 +82,7 @@ public class LosslessRegistryAspectTest {
7282
PolarisPropertiesConfiguration.class,
7383
PolarisDiscoveryClientConfiguration.class,
7484
PolarisDiscoveryAutoConfiguration.class))
85+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
7586
.withPropertyValues("spring.cloud.polaris.lossless.delayRegisterInterval=5000")
7687
.withPropertyValues("spring.cloud.polaris.lossless.healthCheckPath=")
7788
.withPropertyValues("spring.cloud.polaris.lossless.port=" + LOSSLESS_PORT_1)
@@ -91,6 +102,7 @@ public class LosslessRegistryAspectTest {
91102
PolarisPropertiesConfiguration.class,
92103
PolarisDiscoveryClientConfiguration.class,
93104
PolarisDiscoveryAutoConfiguration.class))
105+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
94106
.withPropertyValues("spring.cloud.polaris.lossless.healthCheckInterval=1000")
95107
.withPropertyValues("spring.cloud.polaris.lossless.healthCheckPath=/test")
96108
.withPropertyValues("spring.cloud.polaris.lossless.port=28082")
@@ -102,6 +114,31 @@ public class LosslessRegistryAspectTest {
102114
.withPropertyValues("spring.cloud.polaris.discovery.namespace=" + NAMESPACE_TEST)
103115
.withPropertyValues("spring.cloud.polaris.discovery.token=xxxxxx");
104116

117+
private final WebApplicationContextRunner nacosContextRunner = new WebApplicationContextRunner()
118+
.withConfiguration(AutoConfigurations.of(
119+
AutoServiceRegistrationProperties.class,
120+
UtilAutoConfiguration.class,
121+
UtilIPv6AutoConfiguration.class,
122+
NacosDiscoveryAutoConfiguration.class,
123+
NacosServiceAutoConfiguration.class,
124+
NacosServiceRegistryAutoConfiguration.class,
125+
LosslessAutoConfiguration.class,
126+
LosslessPropertiesBootstrapConfiguration.class,
127+
PolarisContextAutoConfiguration.class)
128+
)
129+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=true")
130+
.withPropertyValues("spring.cloud.nacos.discovery.namespace=" + NAMESPACE_TEST)
131+
.withPropertyValues("spring.cloud.polaris.discovery.enabled=false")
132+
.withPropertyValues("spring.cloud.polaris.lossless.delayRegisterInterval=5000")
133+
.withPropertyValues("spring.cloud.polaris.lossless.healthCheckPath=")
134+
.withPropertyValues("spring.cloud.polaris.lossless.port=" + LOSSLESS_PORT_1)
135+
.withPropertyValues("spring.application.name=" + SERVICE_PROVIDER)
136+
.withPropertyValues("server.port=" + APPLICATION_PORT)
137+
.withPropertyValues("spring.cloud.polaris.localIpAddress=" + HOST)
138+
.withPropertyValues("spring.cloud.polaris.localPort=" + APPLICATION_PORT)
139+
.withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081")
140+
.withPropertyValues("spring.cloud.polaris.discovery.token=xxxxxx");
141+
105142
@BeforeAll
106143
static void beforeAll() throws Exception {
107144
namingServer = NamingServer.startNamingServer(10081);
@@ -181,6 +218,21 @@ public void testRegister2() {
181218
});
182219
}
183220

221+
@Test
222+
public void testNaocsRegister() {
223+
this.nacosContextRunner.run(context -> {
224+
225+
DiscoveryNamespaceGetter discoveryNamespaceGetter = context.getBean(DiscoveryNamespaceGetter.class);
226+
Registration registration = context.getBean(Registration.class);
227+
228+
assertThat(registration instanceof NacosRegistration).isTrue();
229+
assertThat(discoveryNamespaceGetter.getNamespace()).isEqualTo(NAMESPACE_TEST);
230+
231+
BaseInstance baseInstance = SpringCloudLosslessActionProvider.getBaseInstance(registration, discoveryNamespaceGetter);
232+
assertThat(baseInstance.getNamespace()).isEqualTo(NAMESPACE_TEST);
233+
});
234+
}
235+
184236

185237
@Configuration
186238
@EnableAutoConfiguration

0 commit comments

Comments
 (0)