1、问题的直接表现:
org.apache.dubbo.rpc.RpcException: No provider available from registry localhost:9090 for service com.hxy.boot.ticket.articles.api.ArticleService on consumer 192.168.137.1 use dubbo version 2.7.8, please check status of providers(disabled, not registered or in blacklist).
at org.apache.dubbo.registry.integration.RegistryDirectory.doList(RegistryDirectory.java:599)
at org.apache.dubbo.rpc.cluster.directory.AbstractDirectory.list(AbstractDirectory.java:74)
at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.list(AbstractClusterInvoker.java:292)
at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:257)
at org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor.intercept(ClusterInterceptor.java:47)
at org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster$InterceptorInvokerNode.invoke(AbstractCluster.java:92)
at org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:88)
at org.apache.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:74)
2、问题的直接原因
调用服务提供者时,消费者的dubbo的服务目录 `org.apache.dubbo.registry.integration.RegistryDirectory` 的 `forbidden` 属性 为 `true`,如下图:

3、问题的重现
这个问题是偶尔出现的,不容易捕捉。经过分析,在服务提供者的 `org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener#onContextRefreshedEvent(ContextRefreshedEvent event)` 的 31行打上断点,并且`suspend`模式设为 `Thread`,然后重启服务提供者,就会一直重现此问题。如下图:

4、问题的根本原因
问题的根本原因是spring cloud alibaba框架启动nacos自动服务注册的时点比启动dubbo服务注册的时点早。前者的启动时点是监听到`WebServerInitializedEvent`事件时(`org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration#bind(WebSe

在springCloudAlibaba+dubbo+nacos的组合中,消费者有时无法找到服务提供者,原因是nacos服务注册早于dubbo服务启动。问题源于spring boot 2.3.x中事件顺序改变,导致dubbo服务未完全暴露时,nacos已发送实例变更通知。解决方案包括应用端手动启动dubbo服务和更新nacos实例状态,以及框架端调整服务注册时机。
最低0.47元/天 解锁文章
3158

被折叠的 条评论
为什么被折叠?



