springMVC框架整合dubbo微服务项目,使用@Reference注解,出现远程服务NullPointerException异常

1、问题描述:在使用SpringMVC+dubbo+zk+cas搭建微服务项目时,假设项目中有A+B两个服务提供者,有一个web项目。web项目调用B服务,B服务再调用A服务,但是程序一直提示A服务控制针异常。NullPointerException

 

2、问题分析:这里分析一下原因。A B服务此时都是服务的提供者,B是A服务的提供者,他们都是注册到dubbo上的。所以项目发布的时候,无法判断是哪个服务先注册到dubbo上的。而且都是使用dubbo的方式注入,极有可能产生注入服务为Null的情况。

联想到spring中有循环依赖的问题,所以spring框架会提供三级缓存来解决循环依赖,其中涉及到代理类,切面。。等等逻辑

 

3、解决办法:首先先排除@Reference注释引用错【容易有人引用成org.springframework.data.annotation】,正确应该是【import com.alibaba.dubbo.config.annotation.Reference;】;

      排除@Service注释引用错。

      确定引起控制针的原因就是上述问题分析。在dubbo官网,提供了 @Reference(lazy = true),即采用懒加载。这样当服务提供者还没有启动的时候,服务消费者会在对象初始化的时候,创建相应的代理对象,不会产生一个null对象,从而解决dubbo提供者消费者不明确引发的NullPointerException

 

4、详情可参考:http://dubbo.apache.org/zh-cn/docs/user/demos/preflight-check.html

 

posted @ 2020-08-14 19:44  Java民工陆小凤  阅读(1123)  评论(0编辑  收藏  举报