You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2021/10/30 02:37:42 UTC
[servicecomb-java-chassis] branch master updated: [SCB-2351]
Optimize the ping method (#2626)
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 eacfbf6 [SCB-2351] Optimize the ping method (#2626)
eacfbf6 is described below
commit eacfbf6dd6f12671d044e884743ab4bb1607e324
Author: five111 <10...@qq.com>
AuthorDate: Sat Oct 30 10:37:37 2021 +0800
[SCB-2351] Optimize the ping method (#2626)
---
.../consumer/SimpleMicroserviceInstancePing.java | 21 ++++++++++++++-------
.../TestSimpleMicroserviceInstancePing.java | 15 +++++++++++++++
2 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/SimpleMicroserviceInstancePing.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/SimpleMicroserviceInstancePing.java
index 48fd1d6..e9c204c 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/SimpleMicroserviceInstancePing.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/consumer/SimpleMicroserviceInstancePing.java
@@ -23,11 +23,16 @@ import java.net.Socket;
import org.apache.servicecomb.foundation.common.net.IpPort;
import org.apache.servicecomb.foundation.common.net.NetUtils;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
/**
* Simple implementation of .MicroserviceInstancePing using telnet
*/
public class SimpleMicroserviceInstancePing implements MicroserviceInstancePing {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SimpleMicroserviceInstancePing.class);
+
@Override
public int getOrder() {
return 100;
@@ -35,13 +40,15 @@ public class SimpleMicroserviceInstancePing implements MicroserviceInstancePing
@Override
public boolean ping(MicroserviceInstance instance) {
- if (instance.getEndpoints() != null && instance.getEndpoints().size() > 0) {
- IpPort ipPort = NetUtils.parseIpPortFromURI(instance.getEndpoints().get(0));
- try (Socket s = new Socket()) {
- s.connect(new InetSocketAddress(ipPort.getHostOrIp(), ipPort.getPort()), 3000);
- return true;
- } catch (IOException e) {
- // ignore this error
+ if (!CollectionUtils.isEmpty(instance.getEndpoints())) {
+ for (String endpoint : instance.getEndpoints()) {
+ IpPort ipPort = NetUtils.parseIpPortFromURI(endpoint);
+ try (Socket s = new Socket()) {
+ s.connect(new InetSocketAddress(ipPort.getHostOrIp(), ipPort.getPort()), 3000);
+ return true;
+ } catch (IOException e) {
+ LOGGER.warn("ping instance {} endpoint {} failed", instance.getInstanceId(), endpoint);
+ }
}
}
return false;
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestSimpleMicroserviceInstancePing.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestSimpleMicroserviceInstancePing.java
index 7b046c7..e0dc83f 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestSimpleMicroserviceInstancePing.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestSimpleMicroserviceInstancePing.java
@@ -44,4 +44,19 @@ public class TestSimpleMicroserviceInstancePing {
ss.close();
Assert.assertFalse(ping.ping(instance));
}
+
+ @Test
+ public void testPing_more_endpoin() throws IOException {
+ SimpleMicroserviceInstancePing ping = new SimpleMicroserviceInstancePing();
+ MicroserviceInstance instance = new MicroserviceInstance();
+ List<String> endpoints = new ArrayList<>();
+ ServerSocket ss = new ServerSocket(35677);
+ endpoints.add("http://localhost:35676");
+ endpoints.add("http://localhost:35677");
+ instance.setEndpoints(endpoints);
+ Assert.assertTrue(ping.ping(instance));
+ ss.close();
+ Assert.assertFalse(ping.ping(instance));
+ }
+
}