啟動dubbo消費端過程提示No provider available for the service的問題定位與解決
文/朱季謙
某次在啟動dubbo消費端時,發現無法從zookeeper註冊中心獲取到所依賴的消費者API,啟動日誌一直出現這樣的異常提示
Failed to check the status of the service com.fte.zhu.api.testService. No provider available for the service com.fte.zhu.api.testService from the url zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?
......
如何解決類似 No provider available的問題,其實思路很好理解,既然是沒有可用的生產者,也就意味着,應該生產者沒有把其接口註冊到zookeeper註冊中心,首先我們先確定這條假設是否成立,就要去zookeeper服務器上定位下。
進入到zookeeper的/bin目錄下,執行:
[app@zk bin]$ ./zkCli.sh
執行成功後,就可以使用zookeeper的客戶端來獲取註冊在/dubbo節點下的所有數據了。
第一步,先執行,發現該節點下什麼也沒有,只出來一個中括號[ ],這就意味着,生產者沒有成功把接口信息註冊到zk上,若註冊成功,根據以下指令,是能查詢到相應的接口註冊信息的。
[zk: localhost:2181(CONNECTED) 4] ls /dubbo/com.fte.zhu.api.testService/providers
[]
既然如此,那肯定是生產者項目出現了什麼異常,進入到生產者項目,查看其日誌信息,可以看到在其啟動過程中,其中出現了一個Close all registries….的異常信息,這就意味着,該項目的所有dubbo的生產者接口都沒有註冊到zookeeper中,導致在消費者項目上無法獲取到依賴的接口。
這次問題其實是改生產者在啟動過程當中,缺少了一個字段導致的,導致啟動應用失敗,進而無法正常將dubbo服務註冊到zk上。
因此,下次若再出現類型No provider available for the service的問題,可以按照此思路一步步定位,進而找到問題所在。