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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM