エラーメッセージ
HSFServiceAddressNotFoundException: The address of the service to be called is not found.
The service to be called is xxxx, which is in the xxxx group.High-speed Service Framework (HSF) は、呼び出されるサービスのアドレスが見つからない場合にこの例外をスローします。
考えられる原因
| 原因 | 環境 |
|---|---|
| サービスプロバイダーが公開されていない、または設定の不一致 | 両方 |
| ネットワークまたはファイアウォールがプロバイダーの IP とポートをブロックしている | 両方 |
| 複数の NIC が間違った IP アドレスにバインドされている | 両方 |
| ConfigServer がアドレスをプッシュする前にサービス呼び出しが開始された | 両方 |
サービスグループが作成されていない (HSF バージョンが edas.hsf.2114.1.0 より古い場合) | 本番環境 |
| アドレスサーバーの設定ミス、または到達不能 | 両方 |
クイックチェック
環境に関係なく、まずこれらのチェックを実行してください。
1. サービスが公開されていることの確認
関連する環境 (デイリー、ステージング、または本番) の マイクロサービスガバナンス コンソールを開き、ターゲットサービスを検索します。
サービスがリストにない場合、プロバイダーの公開に失敗しています。「サービスレジストリでサービスが見つからない」をご参照ください。
サービスがリストにある場合は、次のチェックに進みます。
2. インターフェイス、バージョン、グループの一致の確認
プロバイダーとコンシューマー両方の XML 構成ファイルで、interface、version、および group の値を比較します。これらの値では大文字と小文字が区別され、先頭または末尾にスペースを含めることはできません。
3. プロバイダーへのネットワーク接続のテスト
Telnet を使用して、プロバイダーのIP および HSF ポート(デフォルト: 12200)への接続をテストします。
telnet <provider-ip> 12200接続に失敗した場合、ファイアウォールルールまたはネットワークの問題がアクセスをブロックしています。「プロバイダーの IP とポートに接続できない」をご参照ください。
接続に成功した場合は、次のチェックに進みます。
4. 複数の NIC の確認
プロバイダーホストに複数のネットワークインターフェースコントローラー (NIC) がある場合、HSF が間違った IP アドレスにバインドされる可能性があります。
オンプレミスの開発環境では、JVM 起動パラメーターで正しい IP を指定します:
-Dhsf.server.ip=<provider-ip>本番環境では、関連する開発者に連絡してトラブルシューティングを依頼してください。
5. 早すぎるサービス呼び出しの確認
コンシューマーが、ConfigServer がプロバイダーのアドレスをプッシュする前にサービスを呼び出すと、呼び出しが失敗します。アドレス解決により多くの時間を確保するには、コンシューマーの構成に maxWaitTimeForCsAddress を追加します。詳細については、「サービスコンシューマーを開発する」をご参照ください。
症状別のトラブルシューティング
サービスレジストリでサービスが見つからない
サービスプロバイダーがサービスレジストリへの登録に失敗しました。ご利用の環境に合った手順に従ってください。
開発環境 (軽量設定センター)
アドレスサーバーのIPを確認します。
ping jmenv.tbsite.netを実行し、返されたIPが軽量構成センターのIPと一致することを確認します。IPが一致しない場合は、正しいアドレスを指定します:-Daddress.server.ip=<config-center-ip>キャッシュデータをクリアします。以下のディレクトリの内容を削除します:
/{userhome}/logs//{userhome}/configclient/
サービスプロバイダーを再起動します。Tomcat がすでに実行中の場合は、再起動してください。
Tomcat の起動ログを確認します。
ログに例外が表示されない場合、起動は正常に完了しています。ログには起動時間がミリ秒単位で表示されます。
ログに例外が含まれている場合は、先に進む前にそれを解決してください。
レジストリ接続を検証します。
/{userhome}/configclient/logs/configclient.logまたは/{userhome}/logs/configclient/configclient.log(パスはバージョンによって異なります) を開きます。このログパターンを探し、IP が軽量設定センターと一致することを確認します。IP が異なる場合は、-Daddress.server.ip=<config-center-ip>で正しい IP を指定します。Connecting to remoting://<IP address>サービス登録を確認します。ログで
[Register-ok][Publish-ok]を検索します。このパターンが表示された場合は、サービス名、バージョン、およびグループが正しいことを確認してください。
同じインスタンス上で複数のサービスプロバイダー (A、B、C など) が実行されている場合、各プロバイダーは 12200 から始まる連続した HSF ポートを使用します。軽量設定センターコンソールのポートが実際のポートと一致することを確認してください。特定の IP とポートを設定するには、以下を使用します:
-Dhsf.server.ip=<ip> -Dhsf.server.port=<port>ポートが一致しない場合は、コンソールで更新するか、サービスを削除してアプリケーションを再公開してください。
本番環境 (EDAS 管理)
アドレスサーバーのドメインを確認します。以下のコマンドを実行してアドレスサーバーのドメインを検索します:
-Daddress.server.domain=<address-server-domain>を探して、次に DNS 解決を確認します:PING が失敗した場合、ネットワークの問題により DNS 解決が妨げられています。cat /home/admin/<taobao-tomcat-directory>/bin/setenv.shping <address-server-domain>キャッシュデータをクリアします。以下のディレクトリの内容を削除します:
/home/admin/logs//home/admin/configclient//home/admin/<taobao-tomcat-directory>/logs/
サービスプロバイダーを再起動します。Tomcat がすでに実行中の場合は、再起動してください。
起動エラーを確認します。
/home/admin/<taobao-tomcat-directory>/logs/catalina.outで例外を確認します。/home/admin/<taobao-tomcat-directory>/logs/localhost-<date>.logで例外を確認します。
サービス登録を確認します。
/home/admin/configclient/logs/configclient.logまたは/home/admin/logs/configclient/configclient.log(パスはバージョンによって異なります)を開きます。[Register-ok][Publish-ok]が表示された場合は、サービス名、バージョン、およびグループを確認してください。[Publish or unregister error]が表示された場合は、HSF バージョンとサービスグループの構成を確認してください。
HSF バージョンとサービスグループを確認します。
edas.hsf.xxxxのバージョンをcatalina.outで検索します:edas.hsf.2114.1.0より前のバージョンの場合: 必要なサービスグループを手動で作成します。Enterprise Distributed Application Service (EDAS) コンソールで、[トラフィック管理] > [マイクロサービスガバナンス] > [HSF] > [サービスグループ] に移動し、サービスグループが存在することを確認します。バージョン
edas.hsf.2114.1.0以降: マルチテナントデータ隔離が有効になります。手動でのサービスグループ作成は必要ありません。サービスは、テナント単位 (常に成功) とグループ単位 (サービス呼び出しに影響なく失敗する場合があります) で 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この例では、
tenant:DEFAULT_TENANTを使用したグループベースの認証は失敗しますが、tenant=0846c173-decf-4b47-xxxxxxxxを使用したテナントベースの公開は成功します。少なくとも 1 件の登録が成功すれば十分です。
コンシューマーがプロバイダーのアドレスを見つけられない
サービスは公開されていますが、コンシューマーがプロバイダーのアドレスを受信できません。ご利用の環境に合った手順に従ってください。
開発環境 (軽量設定センター)
アドレスサーバーのIPを確認します。
ping jmenv.tbsite.netを実行し、返されたIPがライトウェイト構成センターのIPと一致することを確認します。サービスコンシューマーを再起動します。Tomcat がすでに実行中の場合は、再起動してください。
Tomcat の起動ログで例外を確認します。
レジストリ接続を検証します。
/{userhome}/configclient/logs/configclient.logまたは/{userhome}/logs/configclient/configclient.logを開きます。Connecting to remoting://<IP address>内の IP が軽量構成センターと一致することを確認します。アドレスデータを確認するため、ログで
[Data-received]を検索します。プロバイダー情報が受信されない場合は、プロバイダーが登録されていることを確認し、「レジストリにサービスが見つからない」をご参照ください。プロバイダーへの接続性をテストします。
telnet <provider-ip> 12200を実行します。接続に失敗した場合は、ファイアウォールルールまたはネットワークの問題によってアクセスがブロックされています。
本番環境 (EDAS 管理)
EDAS のアプリケーションは、厳格なサービス認証とデータ分離を強制します。アカウント間のサービス呼び出しはブロックされ、本番サービスは開発環境からアクセスできません。
アドレスサーバーのドメインを確認します。
-Daddress.server.domain=<address-server-domain>を見つけ、PING <address-server-domain>を実行して DNS 解決を確認します。cat /home/admin/<taobao-tomcat-directory>/bin/setenv.sh/home/admin/logs/、/home/admin/configclient/、および/home/admin/<taobao-tomcat-directory>/logs/の内容を削除して、キャッシュデータをクリアします。サービスコンシューマーを再起動します。Tomcat がすでに実行中の場合は、再起動してください。
起動エラーを確認します。
例外を確認するには、
/home/admin/<taobao-tomcat-directory>/logs/catalina.outを確認します。/home/admin/<taobao-tomcat-directory>/logs/localhost-<date>.logで例外を確認します。
アドレスデータを確認します。
/home/admin/configclient/logs/configclient.logまたは/home/admin/logs/configclient/configclient.logを開きます。対象のサービスを検索し、[Data-received]を探します。プロバイダー情報が受信されていない場合は、プロバイダーが登録されていることを確認します。プロバイダーへの接続性をテストします。
telnet <provider-ip> 12200を実行します。接続に失敗した場合は、ファイアウォールルールまたはネットワークの問題がアクセスをブロックしています。追加のログを確認します。
コンシューマーサブスクリプションデータ:
/home/admin/configclient/snapshot/DEFAULT_ENV/内のファイルを確認してください。コンテンツの例:[ "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 とポートに接続できない
ファイアウォールまたはネットワークの設定ミスにより、コンシューマーがプロバイダーに到達できません。
プロバイダーサービスが実行中で、ポート 12200 (または設定された HSF ポート) がリッスンしていることを確認します。
コンシューマーからの接続性をテストします:
telnet <provider-ip> 12200Telnet が失敗した場合、ポートをブロックしているファイアウォールルールまたはネットワーク ACL を確認します。さらなるトラブルシューティングについては、関連する開発者に連絡してください。
ログファイルリファレンス
開発環境
| ログファイル | 目的 |
|---|---|
/{userhome}/configclient/logs/configclient.log | レジストリ接続とサービス登録 |
/{userhome}/logs/configclient/configclient.log | 上記と同じ (パスはバージョンによって異なります) |
本番環境
| ログファイル | 目的 |
|---|---|
/home/admin/<taobao-tomcat-directory>/logs/catalina.out | Tomcat の起動と HSF のバージョン |
/home/admin/<taobao-tomcat-directory>/logs/localhost-<date>.log | アプリケーションエラー |
/home/admin/configclient/logs/configclient.log | レジストリ接続とサービス登録 |
/home/admin/logs/configclient/configclient.log | 上記と同じ (パスはバージョンによって異なります) |
/home/admin/configclient/snapshot/DEFAULT_ENV/ | コンシューマーのサブスクリプションデータ |
/home/admin/logs/hsf/hsf.log | サービス呼び出しエラー |
/home/admin/logs/hsf/hsf-remoting.log | ハートビートと接続ログ |
主要なログパターン
| パターン | 意味 |
|---|---|
[Register-ok][Publish-ok] | サービスプロバイダーが正常に登録された |
[公開または登録解除エラー] | サービス登録に失敗した |
[データ受信] | コンシューマーがプロバイダーのアドレスを受信した |
remoting://<IP> に接続中 | レジストリ接続先の IP |
[HSF-0085] | プロバイダーへの TCP 接続に失敗した |