dubbo启动时检查服务
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®ister.ip=10.10.24.4&revision=0.0.1-SNAPSHOT&side=consumer×tamp=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启动时检查服务相关推荐
- Dubbo ---- 启动时检查-直连提供者
Dubbo - 直连提供者 在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连, 点对点直联方式,将以服务接口为单位,忽略注册中心的提供者列表, A接口配置点对点 ...
- Dubbo启动时检查
启动时检查 Dubbo缺省,会在启动时 检查依赖的服务是否可用 不可用时会抛出异常,阻止 Spring 初始化完成 以便上线时,能及早发现问题,默认 check="true" 可以 ...
- 【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级
Dubbo 分布式 RPC 分布式核心基础 分布式概述 RPC Dubbo Dubbo 入门程序 - XML.注解 部署管理控制台 Dubbo Admin 修改绑定的注册 IP 地址 设置启动时检查 ...
- 服务降级-启动时检查
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true". 可以通过 che ...
- 学习dubbo(四): 启动时检查
说明 Dubbo缺省会在启动时检查依赖的服务是否可用不可用时会抛出异常阻止Spring初始化完成以便上线时能及早发现问题默认 check="true". 可以通过 check=&q ...
- mysql 启动时,服务无法启动:发生系统错误1067.
测试中遇到了系统错误1067 问题原因:之前已经启动了一个服务,再次启动服务,导致系统出错mysql mysql: 解决方案: 方案一: 方案二: 运行services.msc,停止mysql服务: ...
- Dubbo使用启动时检查 check=“true“
- IIS5.1错误,启动时WEB服务提示:服务器没有及时响应启动或控制请求 之终极解决方案。...
症状描述:昨天我的iis突然不能测试本地网站了,默认网站显示"已停止",于是点击"启动",结果弹出错误提示对话框"服务器没有及时响应启动或控制请求 & ...
- 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 ...
最新文章
- 创建MYSQL的储存过程
- 《SAS编程与数据挖掘商业案例》学习笔记之二
- 使用Java 8 Lambda简化嵌套循环
- codeforces 617A-C语言解题报告
- mysql varchar转bigint_MySQL 每秒 570000 的写入,如何实现?
- 不用写代码也能学会采集海量企业电话及邮箱数据
- 计算机硬件对于工作的重要性,计算机硬件日常维护的重要性
- linux安装pytorch
- 宠物商家必须给猫狗植入芯片,6月1日生效
- Android中的占位符
- python如何提取word文档某个段落所有内容(包括段落、表格、图片一并提取)
- 2018年 新年目标
- Typora 镜像下载/主题下载
- 【目标检测实验系列】使用yolov3 spp训练西工大遥感数据集NWPU VHR-10(包括如何将NWPU VHR-10转为VOC格式和yolov3 spp实验调试的详细步骤,且附上训练完的权重文件)
- W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x419b4c50)
- 汽车的调谐器技术-Tuner
- map操作 java,Java中Map基本操作
- 如何查看对方发邮件的ip地址
- 自学数据挖掘十大算法之CART
- vs2013的matconvnet_Windows底下编译MatConvNet工具包CPU版本
热门文章
- c语言 数组指针,C语言数组名及指向数组指针的小结
- 诺基亚n73支持java_JAVA性能 vs 诺基亚N71、E61_诺基亚 N73_手机其它OS-中关村在线
- 剑指offer 从上到下打印二叉树
- 如何进行良好的程序设计(1)
- ksnapshot运行look up error undefined symbol错误解决方案
- mysql 创建、修改、删除表
- 让C++对象只能分配到堆/栈和静态区上并判断分配位置
- c语言输出26个英文字母的能量值,菜鸟求助,写一个随机输出26个英文字母的程序...
- Java Annotation详解
- Oracle统计信息的导出、导入