apache / dubbo

The java implementation of Apache Dubbo. An RPC and microservice framework.
https://dubbo.apache.org/
Apache License 2.0
40.5k stars 26.43k forks source link

Dubbo3.1.2经常找不到服务的提供者 #11310

Open yisirman opened 1 year ago

yisirman commented 1 year ago
image

有时候A服务调用C服务时报错没有服务提供者,但是B服务调用C服务正常。且注册中心Nacos中A/B/C服务都有提供注册,且A/B是C服务的订阅者。一切看上去都正常,但A调用C就是会报错没有服务提供者,重启C服务就恢复了。 Dubbo版本 3.1.2 应用级注册订阅 Nacos版本 2.1.2

AlbumenJ commented 1 year ago

有时候A服务调用C服务时报错没有服务提供者

在出现这个问题之前进行什么变更吗,比如C服务发布重启

yisirman commented 1 year ago

有时候A服务调用C服务时报错没有服务提供者

在出现这个问题之前进行什么变更吗,比如C服务发布重启

有的 就是C服务发布重启 偶尔会出现A服务调用C服务找不到提供者 但是这个问题必须要等C服务下一次再次重启才能解决

AlbumenJ commented 1 year ago

有时候A服务调用C服务时报错没有服务提供者

在出现这个问题之前进行什么变更吗,比如C服务发布重启

有的 就是C服务发布重启 偶尔会出现A服务调用C服务找不到提供者 但是这个问题必须要等C服务下一次再次重启才能解决

A 的 Dubbo 日志有都输出吗,可以贴下相关的日志吗

yisirman commented 1 year ago

{ "@timestamp": "2023-01-16 10:06:59.026", "APP_NAME": "xxxxx", "traceId": "6f8cd262ee4b46105a7025393c285f4d", "spanId": "2e8149dcf85758c2", "source_host": "test_obp-work", "method": "logGlobalException", "level": "ERROR", "line_number": "23", "thread_name": "http-nio-80-exec-10", "class": "c.o.a.c.e.GlobalExceptionHandler", "message": "org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.checkInvokers(AbstractClusterInvoker.java:367): Failed to invoke the method pageActivity in the service com.xxxx.app.market.dubbo.ActivityDubboService. No provider available for the service test/com.xxxx.app.market.dubbo.ActivityDubboService:1.0 from registry 10.0.0.199:8848 on the consumer 10.0.1.59 using the dubbo version 3.1.2. Please check if the providers have been started and registered.\n\norg.apache.dubbo.rpc.RpcException: Failed to invoke the method pageActivity in the service com.xxxx.app.market.dubbo.ActivityDubboService. No provider available for the service test/com.xxxx.app.market.dubbo.ActivityDubboService:1.0 from registry 10.0.0.199:8848 on the consumer 10.0.1.59 using the dubbo version 3.1.2. Please check if the providers have been started and registered.\n\tat org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.checkInvokers(AbstractClusterInvoker.java:367)\n\tat org.apache.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:60)\n\tat org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:341)\n\tat org.apache.dubbo.rpc.cluster.router.RouterSnapshotFilter.invoke(RouterSnapshotFilter.java:46)\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)\n\tat org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:100)\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)\n\tat org.apache.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:52)\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)\n\tat org.apache.dubbo.rpc.cluster.filter.support.ConsumerContextFilter.invoke(ConsumerContextFilter.java:110)\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CallbackRegistrationInvoker.invoke(FilterChainBuilder.java:194)\n\tat org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster$ClusterFilterInvoker.invoke(AbstractCluster.java:92)\n\tat org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:103)\n\tat org.apache.dubbo.registry.client.migration.MigrationInvoker.invoke(MigrationInvoker.java:283)\n\tat org.apache.dubbo.rpc.proxy.InvocationUtil.invoke(InvocationUtil.java:56)\n\tat org.apache.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:75)\n\tat com.xxxx.app.market.dubbo.ActivityDubboServiceDubboProxy36.pageActivity(ActivityDubboServiceDubboProxy36.java)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n\tat org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)\n\tat com.sun.proxy.$Proxy391.pageActivity(Unknown Source)\n\tat com.xxxx.app.work.repository.market.ActivityRepository.pageActivity(ActivityRepository.java:112)\n\tat com.xxxx.app.work.controller.market.ActivityManagerController.list(ActivityManagerController.java:193)\n\tat com.xxxx.app.work.controller.market.ActivityManagerController$$FastClassBySpringCGLIB$$f38adeb9.invoke(<generated>)\n\tat org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n\tat org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)\n\tat com.xxxx.app.work.interceptor.ActionLogAspect.processAuthority(ActionLogAspect.java:42)\n\tat sun.reflect.GeneratedMethodAccessor542.invoke(Unknown Source)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)\n\tat org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)\n\tat org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n\tat org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n\tat org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n\tat com.xxxx.app.work.controller.market.ActivityManagerController$$EnhancerBySpringCGLIB$$eaf2606f.list(<generated>)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)\n\tat org.springframework.cloud.context.scope.GenericScope$LockedScopedProxyFactoryBean.invoke(GenericScope.java:499)\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n\tat org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n\tat com.xxxx.app.work.controller.market.ActivityManagerController$$EnhancerBySpringCGLIB$$12bf21f2.list(<generated>)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:626)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat brave.servlet.TracingFilter.doFilter(TracingFilter.java:68)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat brave.servlet.TracingFilter.doFilter(TracingFilter.java:87)\n\tat org.springframework.cloud.sleuth.instrument.web.LazyTracingFilter.doFilter(TraceWebServletAutoConfiguration.java:141)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.lang.Thread.run(Thread.java:748)\n\n" }

Johnson-Jia commented 1 year ago

使用k8s 容器,内部启动docker服务, 生产者重启后ip变成新的了, 但是消费者还是使用旧的生产者ip连接,造成找不到生产者。

hebrd commented 1 year ago

猜测是开启了推空保护引起的,可尝试关闭推空保护,具体查看文档

Lingzhou314 commented 1 year ago

dubbo 都升级了多少个版本了,还是依然有各种No provider出现,尤其是部署在k8s容器中的服务,基本上都是nacos注册中心没有问题,而是dubbo的调用端有问题,能不能提供一个重拉的配置,只要调用出现No provide就去注册中心重拉一下服务列表,是不是能解决问题,虽然不优雅但有效

AlbumenJ commented 1 year ago

dubbo 都升级了多少个版本了,还是依然有各种No provider出现,尤其是部署在k8s容器中的服务,基本上都是nacos注册中心没有问题,而是dubbo的调用端有问题,能不能提供一个重拉的配置,只要调用出现No provide就去注册中心重拉一下服务列表,是不是能解决问题,虽然不优雅但有效

  1. No provider 是一个综合性的问题,服务端没有正常启动,注册中心推送有没有延迟,消费端是否建连成功等都会影响
  2. Nacos 在低版本确实会有存在推送丢失的情况,但是这个在 #10468 中已经修复,如果使用最新的 3.1.6 版本还有问题请提交 issue
  3. 在 3.x 中,我们已经添加了许多注册中心相关的日志,请正确配置 dubbo 的 logger 输出,在出现 No provider 的时候可以通过往前的 Dubbo 日志判断地址推送情况(如果无法判断可以在 issue 中一并附上,如果涉及数据不方便在 issue 发也可以直接发我邮箱)
  4. 最近 Dubbo 社区会就 No Provider、Timeout 等问题专门提供排查文档,预计二月底上线
fawks96 commented 1 year ago

dubbo 都升级了多少个版本了,还是依然有各种No provider出现,尤其是部署在k8s容器中的服务,基本上都是nacos注册中心没有问题,而是dubbo的调用端有问题,能不能提供一个重拉的配置,只要调用出现No provide就去注册中心重拉一下服务列表,是不是能解决问题,虽然不优雅但有效

  1. No provider 是一个综合性的问题,服务端没有正常启动,注册中心推送有没有延迟,消费端是否建连成功等都会影响
  2. Nacos 在低版本确实会有存在推送丢失的情况,但是这个在 [3.0] Fix Nacos aggregate listen #10468 中已经修复,如果使用最新的 3.1.6 版本还有问题请提交 issue
  3. 在 3.x 中,我们已经添加了许多注册中心相关的日志,请正确配置 dubbo 的 logger 输出,在出现 No provider 的时候可以通过往前的 Dubbo 日志判断地址推送情况(如果无法判断可以在 issue 中一并附上,如果涉及数据不方便在 issue 发也可以直接发我邮箱)
  4. 最近 Dubbo 社区会就 No Provider、Timeout 等问题专门提供排查文档,预计二月底上线

您好,关于您在第二点提到的nacos可能存在推送丢失问题,方便看下我的这个case是否可能是这个原因导致的呢?就是nacos把provider的ip推给dubbo了,但是这个推送丢失了。 https://github.com/apache/dubbo/issues/12390 谢谢

fawks96 commented 1 year ago

具体这个 https://github.com/apache/dubbo/commit/43c4033e11c07a59cb052a4ee7a18b95b26de707 NacosAggregateListener 的原理,网上搜不到介绍, @AlbumenJ 方便简单介绍一下么? 修复了什么场景下的bug呢

jzcccc commented 1 year ago

同样出现这个问题,环境:k8s、nacos server 2.1.0、nacos client 2.1.0、jdk11,dubbo 3.0.4。 a、b consumer、c provider 三个服务,都运行的好好的没重启。b服务每次都是启动正常调用c,过一会就会报错。 No provider available from registry nacos:8848 for service com.***:1.0.0 on consumer xxx.xxx.xxx use dubbo version 3.0.4, please check status of providers(disabled, not registered or in blacklist). org.apache.dubbo.rpc.RpcException: No provider available from registry nacos:8848 for service com.***:1.0.0 on consumer xxx.xxx.xxx use dubbo version 3.0.4, please check status of providers(disabled, not registered or in blacklist).

AlbumenJ commented 1 year ago

同样出现这个问题,环境:k8s、nacos server 2.1.0、nacos client 2.1.0、jdk11,dubbo 3.0.4。 a、b consumer、c provider 三个服务,都运行的好好的没重启。b服务每次都是启动正常调用c,过一会就会报错。 No provider available from registry nacos:8848 for service com.***:1.0.0 on consumer xxx.xxx.xxx use dubbo version 3.0.4, please check status of providers(disabled, not registered or in blacklist). org.apache.dubbo.rpc.RpcException: No provider available from registry nacos:8848 for service com.***:1.0.0 on consumer xxx.xxx.xxx use dubbo version 3.0.4, please check status of providers(disabled, not registered or in blacklist).

同样的问题,升级到最新版本解决

AlbumenJ commented 1 year ago

具体这个 43c4033 NacosAggregateListener 的原理,网上搜不到介绍, @AlbumenJ 方便简单介绍一下么? 修复了什么场景下的bug呢

由于 2.6 Nacos 订阅格式的历史问题,老版本的订阅格式上如果 group 或者 version 为空会忽略多余的 : 配置,导致如果一个服务 group 为 xxx version 为空,另外一个服务 group 为空 version 为 xxx 会被识别为同一个服务。因此在 2.7.4 版本切换到了新的订阅格式,无论 group 或者 version 有没有值都会拼接 :。 而 3.1.6 版本以前的 Nacos 订阅存在推送覆盖的问题,通常情况下只有新的 2.7.4 以后版本的格式有数据,但是在一些特殊情况下 Nacos 会对 2.6 Nacos 订阅格式的监听也进行空推送,导致覆盖了本地的地址列表,进而出现 No Provider。 这个 case 其实修了好几次,等到 3.1.6 才最终彻底修复,我们也欢迎有兴趣研究这个问题的同学撰写相关的文章~

zhangpeibisha commented 1 year ago

Dubbo版本 3.2.4 Nacos服务版本 2.2.3

0.2.10 2.1.0-BETA 1.0.11 也会出现这个问题,咨询下应该如何升级避免这个问题哦
zhangpeibisha commented 1 year ago

你好,可以咨询下具体升级的版本号吗。目前我还是有这个问题

这是我的配置 Dubbo版本 3.2.4 Nacos服务版本 2.2.3

0.2.10 2.1.0-BETA 1.0.11 也会出现这个问题,咨询下应该如何升级避免这个问题哦