今天遇到一个巨坑的问题,就是这个问题导致测试环境的服务都出现500错误。不知道大家有没有遇到过,服务消费者先启动,服务提供者后启动,导致消费者中@Reference实例化的对象都是null的。这也是为什么将代码部署到测试环境所有接口都报500错误的原因,到目前为止还是有点不清楚原因,为什么web项目就可以,SpringBoot项目就不行。后面因为项目时间原因也没有深究原因,就这么不了了之了,目前猜测可能是dubbo没有实时去同步zookeeper,所以后期注册的服务就发现不了了。
问题说清楚了,现在我们来说一说具体的解决方法,一个是在配置文件中添加相应的注解,可是后面发现没作用,但是网络上说可以,因为没有亲自检测过,所以我这边就不贴出来了。还有一种就是今天要介绍的方法了,在配置类中添加如下的信息就可以了,代码如下所示:
/** * 消费者配置不主动监督zookeeper服务 * * @return */ @Bean public ConsumerConfig consumerConfig() { ConsumerConfig consumerConfig = new ConsumerConfig(); consumerConfig.setCheck(false); consumerConfig.setTimeout(20000); return consumerConfig; }
这样就可以了,不管是服务提供者还是服务消费者谁先启动,都可以通过@Reference实例化的对象。加上这个之后,测试环境终于没有出现500的null指针错误了。这边还有一点需要注意的是:很多时候服务提供者既是服务消费者,所以都得加上上面给出的代码。
要更多干货、技术猛料的孩子,快点拿起手机扫码关注我,我在这里等你哦~