dubbo服务注册成功,消费者报错No provider available 原因探索

报错:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[2020-01-07 23:39:52.098] [main] [ERROR] [org.springframework.boot.SpringApplication.reportFailure:822] - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'paymentServiceImpl' defined in URL [*******************/PaymentServiceImpl.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: paymentServiceImpl; nested exception is java.lang.IllegalStateException: Failed to check the status of the *********************.SegChangeService. No provider available for the service **************.SegChangeService from the url registry://***.***.***.***:2181/com.alibaba.dubbo.registry.RegistryService?application=consumer&cluster=available&dubbo=2.6.0&pid=39858&refer=application%3Dconsumer%26dubbo%3D2.6.0%26interface%3D**********.SegChangeService%26methods%3DverifyBlackList%2CprocessChangeBackGroundSplit%2CcreateChange%2CprocessIntlSegChange%2CstopChange%2CprocessChangeBackGround%2CprocessVolChangeBackGround%2Ce2ESearchChangeInfo%2CprocessIndFlightChange%2CsearchChangeVariant%2ClogETSError%2CsearchChange%2CsearchChangeAllChannel%2CdirectChangeSeg%2CgetFlightInfoByChangeNo%2CsendMsg%2CprocessVolChange%2CapplyDomesticSegChange%2CafterSalePnrCheck%2CgetMarketingFlightNo%2CretrieveLog%2CsendMessage%2CprocessDomesticSegChange%2CretrieveChangeItemEMP%2CpnrCheck%2CprocessVolChangeBackGroundSplit%2CcheckRtCode%2CprocessChange%2CfindOtherChangeByTicketNo%2CsearchChangeAllChannelInPage%2CgetChangeOrderInfo%2CretrieveChangeItem%2CquickSearch%2CchangeChangeStatus%2CsimpleSearch%2CapplyIntlSegChange%2CchangeRetry%2CcreateChangePayBill%26pid%3D39858%26register.ip%3D***.***.***.***%26side%3Dconsumer%26timestamp%3D1578411585978&registry=zookeeper&timestamp=1578411586009 to the consumer ***.***.***.*** use dubbo version 2.6.0
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:743)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:390)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1214)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1203)
        at *********Application.main(****Application.java:13)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: org.springframework.beans.factory.BeanCreationException: paymentServiceImpl; nested exception is java.lang.IllegalStateException: Failed to check the status of the service ************.SegChangeService. No provider available for the service **************.SegChangeService from the url registry://***.***.***.***:2181/com.alibaba.dubbo.registry.RegistryService?application=consumer&cluster=available&dubbo=2.6.0&pid=39858&refer=application%3Dconsumer%26dubbo%3D2.6.0%26interface%3D*************.SegChangeService%26methods%3DverifyBlackList%2CprocessChangeBackGroundSplit%2CcreateChange%2CprocessIntlSegChange%2CstopChange%2CprocessChangeBackGround%2CprocessVolChangeBackGround%2Ce2ESearchChangeInfo%2CprocessIndFlightChange%2CsearchChangeVariant%2ClogETSError%2CsearchChange%2CsearchChangeAllChannel%2CdirectChangeSeg%2CgetFlightInfoByChangeNo%2CsendMsg%2CprocessVolChange%2CapplyDomesticSegChange%2CafterSalePnrCheck%2CgetMarketingFlightNo%2CretrieveLog%2CsendMessage%2CprocessDomesticSegChange%2CretrieveChangeItemEMP%2CpnrCheck%2CprocessVolChangeBackGroundSplit%2CcheckRtCode%2CprocessChange%2CfindOtherChangeByTicketNo%2CsearchChangeAllChannelInPage%2CgetChangeOrderInfo%2CretrieveChangeItem%2CquickSearch%2CchangeChangeStatus%2CsimpleSearch%2CapplyIntlSegChange%2CchangeRetry%2CcreateChangePayBill%26pid%3D39858%26register.ip%3D***.***.***.***%26side%3Dconsumer%26timestamp%3D1578411585978&registry=zookeeper&timestamp=1578411586009 to the consumer ***.***.***.*** use dubbo version 2.6.0
        at com.alibaba.dubbo.spring.boot.DubboConsumerAutoConfiguration$1.postProcessBeforeInitialization(DubboConsumerAutoConfiguration.java:100)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:414)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
        ... 23 common frames omitted
Caused by: java.lang.IllegalStateException: Failed to check the status of the service ***************.SegChangeService. No provider available for the service ***************.SegChangeService from the url registry://***.***.***.***:2181/com.alibaba.dubbo.registry.RegistryService?application=consumer&cluster=available&dubbo=2.6.0&pid=39858&refer=application%3Dconsumer%26dubbo%3D2.6.0%26interface%3D*******************.SegChangeService%26methods%3DverifyBlackList%2CprocessChangeBackGroundSplit%2CcreateChange%2CprocessIntlSegChange%2CstopChange%2CprocessChangeBackGround%2CprocessVolChangeBackGround%2Ce2ESearchChangeInfo%2CprocessIndFlightChange%2CsearchChangeVariant%2ClogETSError%2CsearchChange%2CsearchChangeAllChannel%2CdirectChangeSeg%2CgetFlightInfoByChangeNo%2CsendMsg%2CprocessVolChange%2CapplyDomesticSegChange%2CafterSalePnrCheck%2CgetMarketingFlightNo%2CretrieveLog%2CsendMessage%2CprocessDomesticSegChange%2CretrieveChangeItemEMP%2CpnrCheck%2CprocessVolChangeBackGroundSplit%2CcheckRtCode%2CprocessChange%2CfindOtherChangeByTicketNo%2CsearchChangeAllChannelInPage%2CgetChangeOrderInfo%2CretrieveChangeItem%2CquickSearch%2CchangeChangeStatus%2CsimpleSearch%2CapplyIntlSegChange%2CchangeRetry%2CcreateChangePayBill%26pid%3D39858%26register.ip%3D***.***.***.***%26side%3Dconsumer%26timestamp%3D1578411585978&registry=zookeeper&timestamp=1578411586009 to the consumer ***.***.***.*** use dubbo version 2.6.0
        at com.alibaba.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:422)
        at com.alibaba.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:333)
        at com.alibaba.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:163)
        at com.alibaba.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:59)
        at com.alibaba.dubbo.spring.boot.DubboConsumerAutoConfiguration$1.postProcessBeforeInitialization(DubboConsumerAutoConfiguration.java:89)
        ... 26 common frames omitted

 

场景描述:

接口服务器通过zookeeper+dubbo调后台服务,原先有两台服务器A和B提供后台服务,其中B服务器部署有zookeeper,两个后台服务都注册到B上的zookeeper,基本架构如图所示:

后来因一些原因后台切换了IP地址,并且架构也一点改变。改变后架构图如下:

接口切换到新的后台地址发布,就出问题了,抛出了上面的报错信息。

 

原因分析:

1. 新的后台缺少某些接口调用的服务。telnet新后台服务器ip的20880端口,可以发现报错信息中的SegChangeService这个服务有成功注册到zookeeper。排除。

2. 原来接口在用的某些方法在新的后台服务中缺失。排查了后台的war包,发现接口依赖的方法都是有的。排除。

3. 接口依赖的jar包还是旧后台提供的,是否与jar包有关系。替换了新后台的jar包,发布时报同样的错误。

4. 考虑是否与网络关系有关。接口只开通了zookeeper服务器的2181端口和20880端口,没有开通到后台服务器的网络关系。(o゜▽゜)o☆[BINGO!] 答对了。正确做法是开通接口服务器到zookeeper服务器的2181端口和开通接口服务器到后台服务器的20880端口。

 

总结:

这个问题折腾了几天。总的来说是对dubbo和zookeeper理解不到位,没有理解清楚后台服务是通过20880把服务暴露给zookeeper,zookeeper通过2181端口对消费者暴露服务地址,zookeeper只是一个转发的作用,最终消费者还是会跟后台服务器建立起连接。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
服务消费者调用失败可能有多种原因,具体需要根据你的具体情况来分析。以下是一些可能导致服务消费者调用失败的常见问题和解决方法: 1. 检查服务提供者是否已经成功注册ZooKeeper。你可以使用 ZooKeeper 的命令行工具或可视化工具来检查服务提供者是否已经成功注册。如果服务提供者没有成功注册,那么服务消费者将无法找到该服务,调用也会失败。 2. 检查服务消费者是否正确引用了服务提供者的接口。服务消费者在调用服务提供者时,需要正确引用服务提供者的接口,否则将无法调用成功。你可以检查服务消费者代码中引用服务提供者接口的地方,确保其与服务提供者的接口一致。 3. 检查服务消费者的网络连接是否正常。服务消费者需要能够正确连接到 ZooKeeper服务提供者,才能调用服务。你可以检查服务消费者的网络连接是否正常,确保其可以与 ZooKeeper服务提供者建立连接。 4. 检查服务提供者的配置是否正确。服务提供者的配置可能会影响服务消费者的调用。你可以检查服务提供者的配置项,确保其与服务消费者的配置一致。 5. 检查服务提供者的实现是否正确。如果服务提供者的实现有问题,可能会导致服务消费者调用失败。你可以检查服务提供者的实现代码,确保其正确实现了服务接口。 希望这些提示能够帮助你解决问题。如果你需要更多的帮助,请提供更多的上下文和错误信息,我会尽力为你提供帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值