正经学徒,佛系记录,不搞事情
基于上文:https://blog.csdn.net/qq_31748587/article/details/84878167
官方解释:Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题。
启动时检查分为两类:
- 服务订阅成功:进一步判断服务提供者是否提供相应服务,涉及关键词是 reference ,consumer
- 服务订阅失败:注册订阅时就已经失败,如注册中心未启动,涉及关键词是 registry
未设置启动时检查功能,dubbo默认为true,即默认启动时会进行检查,并报出相应的错误。如果需要修改默认值,可以使用consumer关键词,如果需要对特定的服务单独设置,则使用reference,该值会覆盖consumer关键词设置的值。
另外一个值得注意的地方是:如果使用的是启动时检查,一开始项目启动报错,后面服务恢复的时候,系统还是反射。但如果关闭启动时检查,当服务恢复时,系统会自动连上。
官方建议关闭启动时检查的情况:
测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check="false"
,总是会返回引用,当服务恢复时,能自动连上。
测试:
- 未设置启动时检查,即默认启动时检查的情况:
步骤:启动zookeeper,启动服务消费者,但不启动服务提供者
如图所示,系统报错反射错误
- 设置启动时检查
步骤:修改服务消费者端的配置文件:
#设置关闭启动时检查
dubbo.reference.com.mn.user.bs.UserBS.check=false
此时,相同操作下,系统不会报错。
- 测试开启 启动时检查,服务的联通性
步骤:启动zookeeper,启动服务消费者,但不启动服务提供者。
此时系统报错,并且不能请求
启动服务提供者,依然无法请求服务
- 测试关闭 启动时检查,服务的联通性
步骤:启动zookeeper,启动服务消费者,但不启动服务提供者。
此时系统报错,并且不能请求
启动服务提供者,服务可以请求了,说明设置关闭启动时检查,当服务启动时,系统会自动连上
registry同理,判断注册中心是否成功启动,以此决定系统启动时是否抛出异常