錯(cuò)誤編碼:HSF-0001
報(bào)錯(cuò)信息
HSFServiceAddressNotFoundException 未找到需要調(diào)用的服務(wù)目標(biāo)地址。
描述信息
需要調(diào)用的目標(biāo)服務(wù)為:xxxx; 組別為:xxxx。
基本問題排查
服務(wù)本身的發(fā)布、調(diào)用是否正確。
驗(yàn)證服務(wù)是否發(fā)布:在對(duì)應(yīng)環(huán)境(日常、預(yù)發(fā)或線上環(huán)境)的微服務(wù)治理控制臺(tái)查詢需要的服務(wù)。
名稱不匹配,檢查代碼中對(duì)應(yīng)發(fā)布者和消費(fèi)者XML配置的interface、version、group,3個(gè)數(shù)據(jù)要完全一致(注意大小寫也要一樣, 同時(shí)要注意前后不能有空格)。
檢查服務(wù)提供者防火墻是否開啟或網(wǎng)絡(luò)不通,即telnet服務(wù)提供者IP HSF端口(默認(rèn)12200)是否可以正常連接。如果不能正常連接說明防火墻開啟或網(wǎng)絡(luò)存在問題,需要協(xié)調(diào)相關(guān)負(fù)責(zé)人員排查。
是否存在多網(wǎng)卡,如果存在多網(wǎng)卡可以使用
-Dhsf.server.ip
指定服務(wù)端的IP。本地開發(fā)環(huán)境可以直接設(shè)定JVM啟動(dòng)參數(shù)。
生產(chǎn)環(huán)境需要跟開發(fā)聯(lián)系確定如何解決。
檢查是否因服務(wù)調(diào)用太快,在ConfigServer將地址推送過來之前就發(fā)起調(diào)用導(dǎo)致出錯(cuò)。在服務(wù)消費(fèi)者的配置項(xiàng)里添加 maxWaitTimeForCsAddress 的相關(guān)配置,請(qǐng)參見開發(fā)服務(wù)消費(fèi)者。
本地開發(fā)環(huán)境排查
本地使用輕量配置中心進(jìn)行開發(fā)時(shí),服務(wù)發(fā)布、訂閱均無需鑒權(quán),故服務(wù)正常啟動(dòng)就可以注冊、訂閱成功。在排除掉前面的基本問題后,可以按照如下步驟進(jìn)行排查。
輕量配置中心檢查。
服務(wù)提供者排查。
如果輕量配置中心控制臺(tái)發(fā)現(xiàn)服務(wù)未能發(fā)布成功,請(qǐng)進(jìn)行如下排查。
執(zhí)行ping jmenv.tbsite.net命令,確定地址服務(wù)器IP跟輕量配置中心IP是否一致。
清空/{userhome}/logs/下所有日志,清空/{userhome}/configclient/目錄。
啟動(dòng)服務(wù)提供者應(yīng)用。如果之前Tomcat已經(jīng)啟動(dòng),請(qǐng)重啟。
查看Tomcat啟動(dòng)日志。
如果無異常信息,回顯信息中會(huì)顯示啟動(dòng)耗時(shí),單位ms。
如果有異常,請(qǐng)解決異常。
查看/{userhome}/configclient/logs/configclient.log或/{userhome}/logs/configclient/configclient.log(不同版本稍有區(qū)別),查找
Connecting to remoting://{IP 地址}
連接的注冊中心IP與輕量配置中心IP是否一致。如果不一致,請(qǐng)確認(rèn)輕量配置中心是否通過-Daddress.server.ip={可以訪問的 IP}
調(diào)整過IP。對(duì)應(yīng)服務(wù)[Register-ok][Publish-ok],確定服務(wù)名、版本、分組都是預(yù)期的信息。
如果顯示[Register-ok][Publish-ok],說明服務(wù)提供者正常注冊到服務(wù)注冊中心。開發(fā)環(huán)境只要啟動(dòng)成功就可以注冊成功。
說明在實(shí)際開發(fā)過程中機(jī)器上可能會(huì)同時(shí)啟動(dòng)多個(gè)服務(wù)提供者,例如A,B,C;每個(gè)服務(wù)提供者對(duì)外提供的HSF端口會(huì)在12200基礎(chǔ)上依次累加。同時(shí)可以通過在JVM參數(shù)上指定IP和端口:
-Dhsf.server.ip=<ip> -Dhsf.server.port=<port>
。在輕量配置中心上可以檢查服務(wù)端端口與實(shí)際啟動(dòng)的端口是否一致,不一致會(huì)導(dǎo)致消費(fèi)端調(diào)用失敗,可以通過輕量配置中心控制臺(tái)更新服務(wù)端端口,或者刪除掉服務(wù),重新發(fā)布應(yīng)用。服務(wù)消費(fèi)者排查。
執(zhí)行ping jmenv.tbsite.net命令,確定地址服務(wù)器IP跟輕量配置中心IP一致。
啟動(dòng)服務(wù)消費(fèi)者應(yīng)用,如果之前Tomcat已經(jīng)啟動(dòng),請(qǐng)重啟。
查看Tomcat啟動(dòng)日志。
如果無異常信息,回顯信息中會(huì)顯示啟動(dòng)耗時(shí),單位ms。
如果有異常,請(qǐng)解決異常。
查看
/{userhome}/configclient/logs/configclient.log
或/{userhome}/logs/configclient/configclient.log
(不同版本稍有區(qū)別),查找Connecting to remoting://{IP 地址}
連接的注冊中心IP跟輕量配置中心IP一致,如果不一致,請(qǐng)確認(rèn)輕量配置中心是否通過-Daddress.server.ip={可以訪問的 IP}
調(diào)整過IP。查看日志中對(duì)應(yīng)的服務(wù)訂閱情況,
[Data-received]
是否收到服務(wù)提供者的具體信息。如果未收到服務(wù)提供者數(shù)據(jù),需要確定服務(wù)提供者服務(wù)已經(jīng)注冊成功。檢查訂閱者機(jī)器上Telnet服務(wù)提供者的IP端口,是否可以正常聯(lián)通。如果不能正常連接說明防火墻開啟或網(wǎng)絡(luò)存在問題,需要協(xié)調(diào)相關(guān)負(fù)責(zé)人員排查。
線上環(huán)境排查
使用EDAS管理和部署的應(yīng)用都是使用的正式環(huán)境,正式環(huán)境存在嚴(yán)格的服務(wù)鑒權(quán)和數(shù)據(jù)隔離。由于存在鑒權(quán),正式環(huán)境不同主賬號(hào)之間的服務(wù)無法直接互相調(diào)用,同時(shí)開發(fā)環(huán)境也無法調(diào)用訪問正式環(huán)境的服務(wù)。
服務(wù)提供者排查。
查看id="codeph_hor_1ki****">cat /home/admin/{taobao-tomcat 目錄}/bin/setenv.sh該文件中
-Daddress.server.domain={地址服務(wù)器域名}
對(duì)應(yīng)地址服務(wù)器域名。執(zhí)行
ping {地址服務(wù)器域名}
命令,查看返回的IP是否正常。如果不能ping通,說明網(wǎng)絡(luò)存在問題,請(qǐng)排查網(wǎng)絡(luò)。清空/home/admin/logs/下所有日志、/home/admin/configclient/目錄和/home/admin/{taobao-tomcat 目錄}/logs/目錄。
啟動(dòng)服務(wù)提供者應(yīng)用。如果之前 Tomcat 已經(jīng)啟動(dòng),請(qǐng)重啟。
查看/home/admin/{taobao-tomcat 目錄}/logs/catalina.out。
如果無異常信息,該文件最后顯示啟動(dòng)耗時(shí),單位ms。
如果有異常,請(qǐng)解決異常。
查看/home/admin/{taobao-tomcat 目錄}/logs/localhost-{日期}.log該文件是否有異常信息。如果有異常,請(qǐng)解決異常。
查看/home/admin/configclient/logs/configclient.log 或/home/admin/logs/configclient/configclient.log(不同版本稍有區(qū)別),對(duì)應(yīng)服務(wù)[Register-ok][Publish-ok],確定服務(wù)名、版本、分組是否為預(yù)期信息。如果顯示[Publish or unregister error],請(qǐng)排查。
查看catalina.out日志中
edas.hsf.xxxx
格式的版本。低于
edas.hsf.2114.1.0
,您必須創(chuàng)建對(duì)應(yīng)服務(wù)分組,否則會(huì)鑒權(quán)失敗。登錄EDAS控制臺(tái),在左側(cè)導(dǎo)航欄,選擇 ,查看應(yīng)用的服務(wù)分組是否已經(jīng)創(chuàng)建。大于或等于
edas.hsf.2114.1.0
,EDAS已提供多租戶方式隔離,不需要?jiǎng)?chuàng)建服務(wù)分組。對(duì)應(yīng)服務(wù)會(huì)注冊2次,一次是基于租戶注冊(總是成功),一次是基于分組注冊(可能失敗,但不影響服務(wù)調(diào)用)。2018-07-19 10:28:44.716|ERROR|[] [] [%s] [Publish or unregister error] spas-authentication-failed! dataId:com.alibaba.edas.testcase.api.TestCase:1.0.0 group:test error:java.lang.Error: A receivedRevision:2 tenant:DEFAULT_TENANT 2018-07-19 10:28:44.717|INFO|[] [] [] [Register-ok] Publisher (HSFProvider-com.alibaba.edas.testcase.api.TestCase:1.0.0.2 for com.alibaba.edas.testcase.api.TestCase:1.0.0)Tenant:0846c173-decf-4b47-xxxxxxxx in group test in env default 2018-07-19 10:28:44.717|INFO|[] [] [] [Publish-ok] dataId=com.alibaba.edas.testcase.api.TestCase:1.0.0, clientId=HSFProvider-com.alibaba.edas.testcase.api.TestCase:1.0.0.2, datumId=ecu:ed5b9d2b-a276-4ad7-b7b9-14e432ff****:192.168.xx.xx,tenant=0846c173-decf-4b47-xxxxxxxx, rev=2, env=default
上述ERROR級(jí)別日志中:使用
tenant:DEFAULT_TENANT
鑒權(quán)失敗;使用tenant=0846c173-decf-4b47-xxxxxxxx
發(fā)布成功。只需保證兩套鑒權(quán)成功一次即可。返回信息中提示[Register-ok][Publish-ok],說明服務(wù)提供者正常注冊到服務(wù)注冊中心。
服務(wù)消費(fèi)者排查。
執(zhí)行
cat /home/admin/{taobao-tomcat 目錄}/bin/setenv.sh
命令,查看文件中-Daddress.server.domain={地址服務(wù)器域名}
對(duì)應(yīng)地址服務(wù)器域名。執(zhí)行
ping {地址服務(wù)器域名}
命令,查看返回的IP是否正常。如果不能ping通,說明網(wǎng)絡(luò)存在問題,請(qǐng)排查網(wǎng)絡(luò)。清空 /home/admin/logs/下所有日志、 /home/admin/configclient/目錄以及 /home/admin/{taobao-tomcat 目錄}/logs/目錄。
啟動(dòng)服務(wù)消費(fèi)者應(yīng)用,如果之前Tomcat已經(jīng)啟動(dòng),請(qǐng)重啟。
查看/home/admin/{taobao-tomcat 目錄}/logs/catalina.out文件。
如果無異常信息,該文件最后顯示啟動(dòng)耗時(shí),單位ms。
如果有異常,請(qǐng)解決異常。
查看 /home/admin/{taobao-tomcat 目錄}/logs/localhost-{日期}.log文件中是否有異常信息。如果有異常,請(qǐng)解決異常。
查看 /home/admin/configclient/logs/configclient.log 或 /home/admin/logs/configclient/configclient.log(不同版本稍有區(qū)別)日志中對(duì)應(yīng)的服務(wù)訂閱情況。在日志中,搜索對(duì)應(yīng)服務(wù),查看返回信息中[Data-received]字段,是否收到服務(wù)提供者的具體信息。如果未收到服務(wù)提供者數(shù)據(jù),需要確定服務(wù)提供者服務(wù)是否已經(jīng)注冊成功。
檢查訂閱者機(jī)器上Telnet服務(wù)提供者的IP端口,是否可以正常聯(lián)通。如果不能正常連接,說明防火墻開啟或網(wǎng)絡(luò)存在問題,需要協(xié)調(diào)相關(guān)負(fù)責(zé)人員排查。
相關(guān)日志排查。
查看/home/admin/configclient/snapshot/DEFAULT_ENV/文件中,消費(fèi)端服務(wù)訂閱到的實(shí)際服務(wù)列表數(shù)據(jù)信息如下:
[root@iZ2ze26awga24ijh93152dZ com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0]# cat HSF-0846c173-decf-4b47-8aa0-xxxxxx.dat [ "192.168.xx.xx:12200?_p\u003dhessian2\u0026_ENV\u003dDEFAULT\u0026v\u003d2.0\u0026_TIMEOUT\u003d3000\u0026_ih2\u003dy\u0026_TID\u003d0846c173-decf-4b47-8aa0-04b5a561****\u0026_SERIALIZETYPE\u003dhessian\u0026_auth\u003dy" ]
查看/home/admin/logs/hsf/hsf.log文件中服務(wù)調(diào)用報(bào)錯(cuò)信息。
查看/home/admin/logs/hsf/hsf-remoting.log記錄的消費(fèi)端與服務(wù)端心跳檢查日志,若出現(xiàn)如下日志:
01 2018-06-20 12:35:00.797 ERROR [HSF-Worker-2-thread-1:hsf.remoting] [] [] [HSF-0085] [remoting] fail to connect: /192.168.xx.xx:12200 in timeout: 4000
該日志為消費(fèi)端與提供端無法建立TCP長連接。
檢查對(duì)應(yīng)的機(jī)器IP上的服務(wù)正常啟動(dòng),對(duì)應(yīng)的端口是否已經(jīng)處于監(jiān)聽狀態(tài)(例如12200)。
否則,可以嘗試檢查消費(fèi)端telnet服務(wù)端IP Port的端口是否未開放。