This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 335130503 [SCB-2850]Health Ping use self microservice to avoid target
prepare schema (#4190)
335130503 is described below
commit 335130503b37f9608f922f2c6803232087fddbc4
Author: liubao68 <[email protected]>
AuthorDate: Thu Jan 11 09:52:41 2024 +0800
[SCB-2850]Health Ping use self microservice to avoid target prepare schema
(#4190)
---
.../org/apache/servicecomb/registry/DiscoveryManager.java | 10 ++++++++++
.../solution/basic/integration/HealthInstancePing.java | 14 +++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
index ff51504d7..33b1a23f5 100644
---
a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
+++
b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/DiscoveryManager.java
@@ -82,6 +82,7 @@ public class DiscoveryManager implements LifeCycle {
try {
runnable.run();
} catch (Throwable e) {
+ // This would never happen, because Worker will catch Throwable
and mute all tasks.
LOGGER.error("discovery manager task error, not allowed please
fix. ", e);
}
}
@@ -93,6 +94,15 @@ public class DiscoveryManager implements LifeCycle {
}
private void doTask() {
+ // doTask can not throw exception or will mute all tasks.
+ try {
+ doTaskImpl();
+ } catch (Throwable e) {
+ LOGGER.error("discovery manager task error. ", e);
+ }
+ }
+
+ private void doTaskImpl() {
Map<String, Map<String, List<String>>> removed = new HashMap<>();
for (Entry<String, Map<String, Map<String, StatefulDiscoveryInstance>>>
apps : allInstances.entrySet()) {
for (Entry<String, Map<String, StatefulDiscoveryInstance>> services :
apps.getValue().entrySet()) {
diff --git
a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
index b1e14880b..d128365e1 100644
---
a/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
+++
b/solutions/solution-basic/src/main/java/org/apache/servicecomb/solution/basic/integration/HealthInstancePing.java
@@ -20,6 +20,7 @@ import java.net.URI;
import java.util.HashMap;
import java.util.Map;
+import org.apache.servicecomb.config.BootStrapProperties;
import org.apache.servicecomb.core.Endpoint;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.SCBEngine;
@@ -33,6 +34,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Lazy;
+import org.springframework.core.env.Environment;
import org.springframework.util.CollectionUtils;
public class HealthInstancePing implements InstancePing {
@@ -42,12 +44,19 @@ public class HealthInstancePing implements InstancePing {
private TelnetInstancePing telnetInstancePing;
+ private Environment environment;
+
@Autowired
@Lazy
public void setScbEngine(SCBEngine scbEngine) {
this.scbEngine = scbEngine;
}
+ @Autowired
+ public void setEnvironment(Environment environment) {
+ this.environment = environment;
+ }
+
@Autowired
@Lazy
public void setTelnetInstancePing(@Qualifier("telnetInstancePing")
TelnetInstancePing telnetInstancePing) {
@@ -76,7 +85,10 @@ public class HealthInstancePing implements InstancePing {
if (transport == null) {
continue;
}
- Invocation invocation =
InvokerUtils.createInvocation(instance.getServiceName(), transportName,
+ // Use myself service name instead of the target. Because can avoid
create
+ // MicroserviceReferenceConfig for the target.
+ Invocation invocation =
InvokerUtils.createInvocation(BootStrapProperties.readServiceName(environment),
+ transportName,
ManagementEndpoint.NAME, "health",
args, boolean.class);
invocation.setEndpoint(new Endpoint(transport, endpoint, instance));