BraveheartStone opened a new issue, #6143: URL: https://github.com/apache/shenyu/issues/6143
### Is there an existing issue for this? - [x] I have searched the existing issues ### Current Behavior 通过nacos发现服务时,服务只有一个实例的情况下,重启下游服务,会偶现nacos实例为空的情况。导致通过shenyu调用下游服务时报错: ``` "Can not find healthy upstream url, please check your configuration!" ``` ### Expected Behavior 只有一个服务重新完成后,能够正常识别应用。 ### Steps To Reproduce 1. Divide中添加 Selector,通过 nacos 发现服务 2. 下游服务只有一个实例 3. 重启下游服务时,偶现上面错误 ### Environment ```markdown ShenYu version(s):2.7.0.2 ``` ### Debug logs 错误日志: ``` java [nacos.publisher-com.alibaba.nacos.client.naming.event.InstancesChangeEvent] ERROR com.alibaba.nacos.common.notify.NotifyCenter - Event callback exception: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "com.alibaba.nacos.api.naming.po jo.Instance.getInstanceId()" is null at org.apache.shenyu.registry.nacos.NacosInstanceRegisterRepository.lambda$compareInstances$3(NacosInstanceRegisterRepository.ja va:188) at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90) at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1602) at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129) at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230) at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:632) at org.apache.shenyu.registry.nacos.NacosInstanceRegisterRepository.lambda$compareInstances$4(NacosInstanceRegisterRepository.ja va:188) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) at org.apache.shenyu.registry.nacos.NacosInstanceRegisterRepository.compareInstances(NacosInstanceRegisterRepository.java:189) at org.apache.shenyu.registry.nacos.NacosInstanceRegisterRepository.lambda$watchInstances$0(NacosInstanceRegisterRepository.java :135) at com.alibaba.nacos.client.naming.event.InstancesChangeNotifier.onEvent(InstancesChangeNotifier.java:126) at com.alibaba.nacos.client.naming.event.InstancesChangeNotifier.onEvent(InstancesChangeNotifier.java:42) at com.alibaba.nacos.common.notify.DefaultPublisher.lambda$notifySubscriber$0(DefaultPublisher.java:199) at com.alibaba.nacos.common.notify.DefaultPublisher.notifySubscriber(DefaultPublisher.java:206) at com.alibaba.nacos.common.notify.DefaultPublisher.receiveEvent(DefaultPublisher.java:190) at com.alibaba.nacos.common.notify.DefaultPublisher.openEventHandler(DefaultPublisher.java:112) at com.alibaba.nacos.common.notify.DefaultPublisher.run(DefaultPublisher.java:95) ``` ### Anything else? 建议修改后的方案: org/apache/shenyu/registry/nacos/NacosInstanceRegisterRepository.java:188 : ```java Set<Instance> updatedInstances = currentInstances.stream() .filter(currentInstance -> currentInstance.getInstanceId() != null && previousInstances.stream() .anyMatch(previousInstance -> previousInstance.getInstanceId() != null && currentInstance.getInstanceId().equals(previousInstance.getInstanceId()) && !currentInstance.equals(previousInstance))) .collect(Collectors.toSet()); ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@shenyu.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org