Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"

  可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

  另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check="false",总是会返回引用,当服务恢复时,能自动连上。

示例

1.通过 spring 配置文件

关闭某个服务的启动时检查 (没有提供者时报错):

<dubbo:reference interface="com.foo.BarService" check="false" />

关闭所有服务的启动时检查 (没有提供者时报错):

<dubbo:consumer check="false" />

关闭注册中心启动时检查 (注册订阅失败时报错):

<dubbo:registry check="false" />

2.通过 dubbo.properties

dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false

3.    通过 -D 参数

java -Ddubbo.reference.com.foo.BarService.check=false
java -Ddubbo.reference.check=false
java -Ddubbo.consumer.check=false
java -Ddubbo.registry.check=false

配置的含义
dubbo.reference.check=false,强制改变所有 reference 的 check 值,就算配置中有声明,也会被覆盖。

dubbo.consumer.check=false,是设置 check 的缺省值,如果配置中有显式的声明,如:<dubbo:reference check="true"/>,不会受影响。

dubbo.registry.check=false,前面两个都是指订阅成功,但提供者列表是否为空是否报错,如果注册订阅失败时,也允许启动,需使用此选项,将在后台定时重试。

  上面是摘自官网的解释,下面研究其在springboot中关闭检查服务。

1.比如我们启动一个正常的web程序,其service层采用dubbo服务方式获取,我们不提供服务的提供者启动项目

报错创建bean错误:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2019-03-25 17:36:41.523 ERROR 4560 --- [ restartedMain] o.s.boot.SpringApplication : Application startup failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mobileLoginController' defined in file [E:\xiangmu2\springboot-ssm-soa\springboot-ssm-web\target\classes\cn\qlq\controller\mobile\MobileLoginController.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: mobileLoginController; nested exception is java.lang.IllegalStateException: Failed to check the status of the service cn.qlq.service.user.TokenService. No provider available for the service cn.qlq.service.user.TokenService:1.0.0 from the url zookeeper://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?application=consumer&dubbo=2.6.0&interface=cn.qlq.service.user.TokenService&methods=updateIfExistsTokenByTokenStr,findTokenByUsername,deleteInvalidToken,addOrUpdateToken&pid=4560&register.ip=10.10.24.4&revision=0.0.1-SNAPSHOT&side=consumer&timestamp=1553506600929&version=1.0.0 to the consumer 10.10.24.4 use dubbo version 2.6.0
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]

也就是bean默认是检查的,所以springboot项目启动的时候检查依赖关系的时候从dubbo服务中获取不到对应的服务,所以报错。

2.修改bean注入的检查为false,只需要在注解的check属性改为false即可(也就是不检查服务),默认是true

  修改之后服务可以正常启动,我们查看zookeeper注册中心的服务信息,发现没有提供者,如下:

  当我们访问的时候报错信息如下:(没有服务提供者)

com.alibaba.dubbo.rpc.RpcException: No provider available from registry 127.0.0.1:2181 for service cn.qlq.service.user.UserService:1.0.0 on consumer 10.10.24.4 use dubbo version 2.6.0, may be providers disabled or not registered ?
at com.alibaba.dubbo.registry.integration.RegistryDirectory.doList(RegistryDirectory.java:572) ~[dubbo-2.6.0.jar:2.6.0]
at com.alibaba.dubbo.rpc.cluster.directory.AbstractDirectory.list(AbstractDirectory.java:73) ~[dubbo-2.6.0.jar:2.6.0]
at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.list(AbstractClusterInvoker.java:265) ~[dubbo-2.6.0.jar:2.6.0]
at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:224) ~[dubbo-2.6.0.jar:2.6.0]
at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:70) ~[dubbo-2.6.0.jar:2.6.0]
at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:51) ~[dubbo-2.6.0.jar:2.6.0]
at com.alibaba.dubbo.common.bytecode.proxy1.getPageInfoUsers(proxy1.java) ~[dubbo-2.6.0.jar:2.6.0]

  启动服务的提供者,从zookeeper注册中心查看已经有提供者,访问也不会报错:

  通过这个我们也明白了dubbo服务在zookeeper注册中心注册的服务的生产者和消费者信息都存在zookeeper的节点上。  

转载于:https://www.cnblogs.com/qlqwjy/p/10595205.html

dubbo启动时检查服务相关推荐

  1. Dubbo ---- 启动时检查-直连提供者

    Dubbo - 直连提供者 在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连, 点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表, A接口配置点对点 ...

  2. Dubbo启动时检查

    启动时检查 Dubbo缺省,会在启动时 检查依赖的服务是否可用 不可用时会抛出异常,阻止 Spring 初始化完成 以便上线时,能及早发现问题,默认 check="true" 可以 ...

  3. 【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级

    Dubbo 分布式 RPC 分布式核心基础 分布式概述 RPC Dubbo Dubbo 入门程序 - XML.注解 部署管理控制台 Dubbo Admin 修改绑定的注册 IP 地址 设置启动时检查 ...

  4. 服务降级-启动时检查

    Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true". 可以通过 che ...

  5. 学习dubbo(四): 启动时检查

    说明 Dubbo缺省会在启动时检查依赖的服务是否可用不可用时会抛出异常阻止Spring初始化完成以便上线时能及早发现问题默认 check="true". 可以通过 check=&q ...

  6. mysql 启动时,服务无法启动:发生系统错误1067.

    测试中遇到了系统错误1067 问题原因:之前已经启动了一个服务,再次启动服务,导致系统出错mysql mysql: 解决方案: 方案一: 方案二: 运行services.msc,停止mysql服务: ...

  7. Dubbo使用启动时检查 check=“true“

  8. IIS5.1错误,启动时WEB服务提示:服务器没有及时响应启动或控制请求 之终极解决方案。...

    症状描述:昨天我的iis突然不能测试本地网站了,默认网站显示"已停止",于是点击"启动",结果弹出错误提示对话框"服务器没有及时响应启动或控制请求 & ...

  9. Dubbo启动时qos-server can not bind localhost:22222错误解决

    问题报错 2020-01-12 13:45:59.215 ERROR 8624 --- [main] com.alibaba.dubbo.qos.server.Server : [DUBBO] qos ...

最新文章

  1. 创建MYSQL的储存过程
  2. 《SAS编程与数据挖掘商业案例》学习笔记之二
  3. 使用Java 8 Lambda简化嵌套循环
  4. codeforces 617A-C语言解题报告
  5. mysql varchar转bigint_MySQL 每秒 570000 的写入,如何实现?
  6. 不用写代码也能学会采集海量企业电话及邮箱数据
  7. 计算机硬件对于工作的重要性,计算机硬件日常维护的重要性
  8. linux安装pytorch
  9. 宠物商家必须给猫狗植入芯片,6月1日生效
  10. Android中的占位符
  11. python如何提取word文档某个段落所有内容(包括段落、表格、图片一并提取)
  12. 2018年 新年目标
  13. Typora 镜像下载/主题下载
  14. 【目标检测实验系列】使用yolov3 spp训练西工大遥感数据集NWPU VHR-10(包括如何将NWPU VHR-10转为VOC格式和yolov3 spp实验调试的详细步骤,且附上训练完的权重文件)
  15. W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x419b4c50)
  16. 汽车的调谐器技术-Tuner
  17. map操作 java,Java中Map基本操作
  18. 如何查看对方发邮件的ip地址
  19. 自学数据挖掘十大算法之CART
  20. vs2013的matconvnet_Windows底下编译MatConvNet工具包CPU版本

热门文章

  1. c语言 数组指针,C语言数组名及指向数组指针的小结
  2. 诺基亚n73支持java_JAVA性能 vs 诺基亚N71、E61_诺基亚 N73_手机其它OS-中关村在线
  3. 剑指offer 从上到下打印二叉树
  4. 如何进行良好的程序设计(1)
  5. ksnapshot运行look up error undefined symbol错误解决方案
  6. mysql 创建、修改、删除表
  7. 让C++对象只能分配到堆/栈和静态区上并判断分配位置
  8. c语言输出26个英文字母的能量值,菜鸟求助,写一个随机输出26个英文字母的程序...
  9. Java Annotation详解
  10. Oracle统计信息的导出、导入