[SCB-2682]client component: fix problem when service center not available invocation will fail has been successfully created (#3333)
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
index 6406325..ccc8fb1 100644
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
@@ -17,6 +17,7 @@
package org.apache.servicecomb.service.center.client;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -186,7 +187,11 @@
}
} catch (Exception e) {
LOGGER.error("find service {}#{} instance failed.", k.appId, k.serviceName, e);
- failedKeys.add(k);
+ if (!(e.getCause() instanceof IOException)) {
+ // for IOException, do not remove cache, or when service center
+ // not available, invocation between microservices will fail.
+ failedKeys.add(k);
+ }
}
return failedKeys;
}