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));
+  }
+    
 }