dubbo 使用zookeeper 出現 Dubbo客戶端調用報錯NullPointerException


現在將網上的方法總結一下

方法一:.https://blog.csdn.net/u011294519/article/details/81810631

dubbo-provider.xml:提供者先掃描spring框架,完成spring部分的掃描,然后將為dubbo框架提供服務;消費者部分相反,先掃描dubbo服務,后掃描spring部分~

1. 背景

    使用@Reference注解實現消費者調用服務端代碼,調用報錯NullPointerException,如圖:

    注意:如果你的服務端沒有注冊到dubbo,客戶端在調用時也會出現NullPointerException報錯,所以可以先到dubbo-admin去看下服務端是否已經正常注冊。

    dubo-admin安裝方式可參照:

    https://blog.csdn.net/u011294519/article/details/81712601

2. 服務端代碼

    因為只是寫一個小demo,代碼邏輯十分簡單

2.1. 服務端接口

 

2.2. 服務端接口實現類

       注意:這里的@Service注解需要使用com.alibaba.dubbo.config.annotation.Service。

2.3. 服務端dubbo配置文件

3. 客戶端代碼

3.1.接口

 

3.2. 測試接口

 

3.3. 配置文件

4. Dubbo-admin結果

    到這里為止看上去都很正常,但是只要客戶端調用服務端方法就報NullPointerException。

5. 解決方法

    網上找了很多方法,但是都不能解決問題,后來想到有沒有可能是SpringMVC的包掃描影響了dubbo的注解掃描,然后嘗試着將dubbo的包掃描配置單獨抽出來,放在SpringMVC配置的最上面,果然問題解決。如圖:

    然后把dubbo配置中的這個去掉,問題解決。

但是我的問題沒有解決

方法二:https://blog.csdn.net/yuzhibo0924/article/details/80091646

最近開發公司項目,遇到了dubbo服務為空的情況,現在把出現的情況做個簡單的總結:

 

dubbo為空會報空指針異常!

 

    1.第一種情況:引用有誤,也就是再注入dubbo服務的時候,使用@Reference注解的時候,引用的並不是ali的dubbo,所以一直引入的都是錯誤的。導致注入為null;

 

    這種情況比較常見,因為粗心大意導致import 文件錯誤,只需要認真檢查。就可以找出問題所在。

 

    2.第二種情況:引用很正常,使用的是@Reference的注解,也是ali的dubbo。

 

但具體情況是:(我本人的情況)自己在本地測試,代碼流程完全沒有任何問題。於是將代碼提交到開發環境進行代碼測試,一切正常。然后提交測試,交由測試進行代碼測試。發現問題,最后定位到dubbo服務為空。引用沒有問題,那是什么原因導致的dubbo服務為null呢?后來經過同事指導,才明白問題所在。在同一個項目中,A服務引用B服務(都是注冊到dubbo上的),在項目部署發布的時候,無法判斷是哪個服務先注冊到dubbo上的。所以在A服務中引用B服務,而且通過dubbo的方式注入,極有可能會產生服務注入為null的情況。那么此時在A服務中引用B服務,就可以使用spring框架帶的@Autowired的注入方式,將B服務引用進來。這樣就可以完美解決這個問題。

 

但是我的問題依舊沒有解決

方法三:原因是包名不一致,包名不一致會導致提供者和消費者不在一個節點上,這樣消費者永遠不會獲得值!!

但是也沒有解決我的問題

方法四:

項目設計之初是想分布式部署,所以分了客戶端,和服務端。經過測試發現真的是程序啟動的順序問題。

 

之前都是先啟動server服務端,然后在啟動client端的,但是這兩天項目有點趕,調試的時候,想快點啟動,所以幾乎是同時啟動server和client程序,甚至client先啟動,然后就導致了本文標題的錯誤。之后我就老老實實的先啟動server程序,在啟動client。
---------------------
原文:https://blog.csdn.net/likawei1314/article/details/80757687
方法五

 

@SpringBootApplication之前添加注解@EnableDubboConfig就可以解決了,確保優先加載dubbo配置。


免責聲明!

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



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