Health Checking Protocol implementation for nice-grpc.
This package enables you to use tools like grpc-health-probe with your gRPC server.
In Kubernetes, gRPC probes are supported natively.
npm install nice-grpc-server-health
For the simplest usage, just add the
Health
service implementation to your server. The server will be considered healthy
while it is able to accept requests.
import {createServer} from 'nice-grpc';
import {HealthDefinition, HealthServiceImpl} from 'nice-grpc-server-health';
const server = createServer();
server.add(HealthDefinition, HealthServiceImpl());
You can control the health state of the server or per-service with HealthState
object:
import {createServer} from 'nice-grpc';
import {
HealthDefinition,
HealthServiceImpl,
HealthState,
} from 'nice-grpc-server-health';
const server = createServer();
const healthState = HealthState();
server.add(HealthDefinition, HealthServiceImpl(healthState));
// Add our own service
server.add(MyService, myServiceImpl);
// Set the server status to `unhealthy`. The default server status is `healthy`.
healthState.setStatus('unhealthy');
// Set the `MyService` status to `unhealthy` by specifying fully-qualified name.
// The default service status is `unknown`.
healthState.setStatus('unhealthy', MyService.fullName);
// ...
healthState.setStatus('healthy');
healthState.setStatus('healthy', MyService.fullName);
This package also supports the Watch
method that is able to send real-time
updates of health statuses. Since the Watch
method returns infinite stream, it
is recommended to use the
terminator middleware:
import {createServer} from 'nice-grpc';
import {HealthDefinition, HealthServiceImpl} from 'nice-grpc-server-health';
import {TerminatorMiddleware} from 'nice-grpc-server-middleware-terminator';
const terminatorMiddleware = TerminatorMiddleware();
const server = createServer().use(terminatorMiddleware);
server.add(HealthDefinition, HealthServiceImpl());
await server.listen('0.0.0.0:8080');
// ... terminate middleware before shutdown:
terminatorMiddleware.terminate();
await server.shutdown();