以下のドキュメント、ソースコード、および問題を読みました。
- https://github.com/grpc/grpc/blob/master/doc/health-checking.md
- https://github.com/grpc/grpc-node/blob/master/packages/grpc-health-check/test/health_test.js
- https://github.com/grpc/grpc/issues/10428
例を挙げて説明しようとします:
// Import package
let health = require('grpc-health-check');
// Define service status map. Key is the service name, value is the corresponding status.
// By convention, the empty string "" key represents that status of the entire server.
const statusMap = {
"ServiceFoo": proto.grpc.health.v1.HealthCheckResponse.ServingStatus.SERVING,
"ServiceBar": proto.grpc.health.v1.HealthCheckResponse.ServingStatus.NOT_SERVING,
"": proto.grpc.health.v1.HealthCheckResponse.ServingStatus.NOT_SERVING,
};
// Construct the service implementation
let healthImpl = new health.Implementation(statusMap);
// Add the service and implementation to your pre-existing gRPC-node server
server.addService(health.service, healthImpl);
以下の点がよくわかりません。
statusMap
サービス名は、プロトコル バッファ ファイル内のサービス名と同じにする必要がありますか? または、サービス名を任意に指定することもできます。その場合、サービス名はプロトコル バッファで定義されたサービスにどのようにマップされますか?
ヘルスチェック プロトコルから:
サーバーはすべてのサービスを手動で登録し、個々のステータスを設定する必要があります
なぜ手動で登録する必要があるのですか? サービス コードを生成できる場合、なぜ grpc は にサービス名を自動的に登録するのに役立たないのでしょ
statusMap
うか? (100 サービスのステータスを 1 つずつ設定することを想像してください)サービス ステータスはハード コードであり、アプリケーションの実行時に変更することはできません。設定ミスなどの理由で実行時にサービスを利用できない場合、ダウンストリーム サービスは利用できませんが、サービスのステータスは常にサービスを提供しています (ハードコードであるため)。そうであれば、ヘルス チェックの意味は何ですか?
RESTful API の場合、サーバー全体が正常に動作していることを確認するための/health-check
またはAPI を提供できます。/ping