報錯信息
HSFServiceAddressNotFoundException 未找到需要調用的服務目標地址。
描述信息
需要調用的目標服務為:xxxx; 組別為:xxxx。
基本問題排查
服務本身的發布、調用是否正確。
驗證服務是否發布:在對應環境(日常、預發或線上環境)的微服務治理控制臺查詢需要的服務。
名稱不匹配,檢查代碼中對應發布者和消費者XML配置的interface、version、group,3個數據要完全一致(注意大小寫也要一樣, 同時要注意前后不能有空格)。
檢查服務提供者防火墻是否開啟或網絡不通,即telnet服務提供者IP HSF端口(默認12200)是否可以正常連接。如果不能正常連接說明防火墻開啟或網絡存在問題,需要協調相關負責人員排查。
是否存在多網卡,如果存在多網卡可以使用
-Dhsf.server.ip
指定服務端的IP。本地開發環境可以直接設定JVM啟動參數。
生產環境需要跟開發聯系確定如何解決。
檢查是否因服務調用太快,在ConfigServer將地址推送過來之前就發起調用導致出錯。在服務消費者的配置項里添加 maxWaitTimeForCsAddress 的相關配置,請參見開發服務消費者。
本地開發環境排查
本地使用輕量配置中心進行開發時,服務發布、訂閱均無需鑒權,故服務正常啟動就可以注冊、訂閱成功。在排除掉前面的基本問題后,可以按照如下步驟進行排查。
輕量配置中心檢查。
服務提供者排查。
如果輕量配置中心控制臺發現服務未能發布成功,請進行如下排查。
執行ping jmenv.tbsite.net命令,確定地址服務器IP跟輕量配置中心IP是否一致。
清空/{userhome}/logs/下所有日志,清空/{userhome}/configclient/目錄。
啟動服務提供者應用。如果之前Tomcat已經啟動,請重啟。
查看Tomcat啟動日志。
如果無異常信息,回顯信息中會顯示啟動耗時,單位ms。
如果有異常,請解決異常。
查看/{userhome}/configclient/logs/configclient.log或/{userhome}/logs/configclient/configclient.log(不同版本稍有區別),查找
Connecting to remoting://{IP 地址}
連接的注冊中心IP與輕量配置中心IP是否一致。如果不一致,請確認輕量配置中心是否通過-Daddress.server.ip={可以訪問的 IP}
調整過IP。對應服務[Register-ok][Publish-ok],確定服務名、版本、分組都是預期的信息。
如果顯示[Register-ok][Publish-ok],說明服務提供者正常注冊到服務注冊中心。開發環境只要啟動成功就可以注冊成功。
說明在實際開發過程中機器上可能會同時啟動多個服務提供者,例如A,B,C;每個服務提供者對外提供的HSF端口會在12200基礎上依次累加。同時可以通過在JVM參數上指定IP和端口:
-Dhsf.server.ip=<ip> -Dhsf.server.port=<port>
。在輕量配置中心上可以檢查服務端端口與實際啟動的端口是否一致,不一致會導致消費端調用失敗,可以通過輕量配置中心控制臺更新服務端端口,或者刪除掉服務,重新發布應用。服務消費者排查。
執行ping jmenv.tbsite.net命令,確定地址服務器IP跟輕量配置中心IP一致。
啟動服務消費者應用,如果之前Tomcat已經啟動,請重啟。
查看Tomcat啟動日志。
如果無異常信息,回顯信息中會顯示啟動耗時,單位ms。
如果有異常,請解決異常。
查看
/{userhome}/configclient/logs/configclient.log
或/{userhome}/logs/configclient/configclient.log
(不同版本稍有區別),查找Connecting to remoting://{IP 地址}
連接的注冊中心IP跟輕量配置中心IP一致,如果不一致,請確認輕量配置中心是否通過-Daddress.server.ip={可以訪問的 IP}
調整過IP。查看日志中對應的服務訂閱情況,
[Data-received]
是否收到服務提供者的具體信息。如果未收到服務提供者數據,需要確定服務提供者服務已經注冊成功。檢查訂閱者機器上Telnet服務提供者的IP端口,是否可以正常聯通。如果不能正常連接說明防火墻開啟或網絡存在問題,需要協調相關負責人員排查。
線上環境排查
使用EDAS管理和部署的應用都是使用的正式環境,正式環境存在嚴格的服務鑒權和數據隔離。由于存在鑒權,正式環境不同主賬號之間的服務無法直接互相調用,同時開發環境也無法調用訪問正式環境的服務。
服務提供者排查。
查看id="codeph_hor_1ki****">cat /home/admin/{taobao-tomcat 目錄}/bin/setenv.sh該文件中
-Daddress.server.domain={地址服務器域名}
對應地址服務器域名。執行
ping {地址服務器域名}
命令,查看返回的IP是否正常。如果不能ping通,說明網絡存在問題,請排查網絡。清空/home/admin/logs/下所有日志、/home/admin/configclient/目錄和/home/admin/{taobao-tomcat 目錄}/logs/目錄。
啟動服務提供者應用。如果之前 Tomcat 已經啟動,請重啟。
查看/home/admin/{taobao-tomcat 目錄}/logs/catalina.out。
如果無異常信息,該文件最后顯示啟動耗時,單位ms。
如果有異常,請解決異常。
查看/home/admin/{taobao-tomcat 目錄}/logs/localhost-{日期}.log該文件是否有異常信息。如果有異常,請解決異常。
查看/home/admin/configclient/logs/configclient.log 或/home/admin/logs/configclient/configclient.log(不同版本稍有區別),對應服務[Register-ok][Publish-ok],確定服務名、版本、分組是否為預期信息。如果顯示[Publish or unregister error],請排查。
查看catalina.out日志中
edas.hsf.xxxx
格式的版本。低于
edas.hsf.2114.1.0
,您必須創建對應服務分組,否則會鑒權失敗。登錄EDAS控制臺,在左側導航欄,選擇 ,查看應用的服務分組是否已經創建。大于或等于
edas.hsf.2114.1.0
,EDAS已提供多租戶方式隔離,不需要創建服務分組。對應服務會注冊2次,一次是基于租戶注冊(總是成功),一次是基于分組注冊(可能失敗,但不影響服務調用)。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級別日志中:使用
tenant:DEFAULT_TENANT
鑒權失敗;使用tenant=0846c173-decf-4b47-xxxxxxxx
發布成功。只需保證兩套鑒權成功一次即可。返回信息中提示[Register-ok][Publish-ok],說明服務提供者正常注冊到服務注冊中心。
服務消費者排查。
執行
cat /home/admin/{taobao-tomcat 目錄}/bin/setenv.sh
命令,查看文件中-Daddress.server.domain={地址服務器域名}
對應地址服務器域名。執行
ping {地址服務器域名}
命令,查看返回的IP是否正常。如果不能ping通,說明網絡存在問題,請排查網絡。清空 /home/admin/logs/下所有日志、 /home/admin/configclient/目錄以及 /home/admin/{taobao-tomcat 目錄}/logs/目錄。
啟動服務消費者應用,如果之前Tomcat已經啟動,請重啟。
查看/home/admin/{taobao-tomcat 目錄}/logs/catalina.out文件。
如果無異常信息,該文件最后顯示啟動耗時,單位ms。
如果有異常,請解決異常。
查看 /home/admin/{taobao-tomcat 目錄}/logs/localhost-{日期}.log文件中是否有異常信息。如果有異常,請解決異常。
查看 /home/admin/configclient/logs/configclient.log 或 /home/admin/logs/configclient/configclient.log(不同版本稍有區別)日志中對應的服務訂閱情況。在日志中,搜索對應服務,查看返回信息中[Data-received]字段,是否收到服務提供者的具體信息。如果未收到服務提供者數據,需要確定服務提供者服務是否已經注冊成功。
檢查訂閱者機器上Telnet服務提供者的IP端口,是否可以正常聯通。如果不能正常連接,說明防火墻開啟或網絡存在問題,需要協調相關負責人員排查。
相關日志排查。
查看/home/admin/configclient/snapshot/DEFAULT_ENV/文件中,消費端服務訂閱到的實際服務列表數據信息如下:
[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文件中服務調用報錯信息。
查看/home/admin/logs/hsf/hsf-remoting.log記錄的消費端與服務端心跳檢查日志,若出現如下日志:
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
該日志為消費端與提供端無法建立TCP長連接。
檢查對應的機器IP上的服務正常啟動,對應的端口是否已經處于監聽狀態(例如12200)。
否則,可以嘗試檢查消費端telnet服務端IP Port的端口是否未開放。