文/朱季謙
某次在啟動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的問題,可以按照此思路一步步定位,進而找到問題所在。