gRPC helper is an improved gRPC client with lots of helpful features.
npm i grpc-helper --save
or
yarn add grpc-helper
- Promised unary & client stream call
- Client Load balance
- Service health checking
- Service discovery (static, dns srv)
- Circuit breaker based on Brakes
- Retry based on async-retry
- Metrics for prometheus based on prom-client
- Highly custom options
const helper = new GRPCHelper({
packageName: 'helloworld',
serviceName: 'Greeter',
protoPath: path.resolve(__dirname, './fixtures/hello.proto'),
// intervalMs will determine how frequent the resolver lookup the records
sdUri: 'dns://_grpc._tcp.greeter?intervalMs=5000',
});
await helper.waitForReady();
const res = await helper.SayHello({
name: 'foo',
});
const helper = new GRPCHelper({
packageName: 'helloworld',
serviceName: 'Greeter',
protoPath: path.resolve(__dirname, './fixtures/hello.proto'),
sdUri: 'static://localhost:50051,localhost:50052,localhost:50053',
});
await helper.waitForReady();
const res = await helper.SayHello({
name: 'foo',
});
const helper = new GRPCHelper({
packageName: 'helloworld',
serviceName: 'Greeter',
protoPath: path.resolve(__dirname, './fixtures/hello.proto'),
sdUri: 'static://localhost:50051',
resolveFullResponse: true,
});
await helper.waitForReady();
const { message, peer, status, metadata } = await helper.SayHello({
name: 'foo',
});
const stream = new stream.PassThrough({ objectMode: true });
const promise = helper.SayMultiHello(stream);
stream.write({
name: 'foo1',
});
stream.write({
name: 'foo2',
});
stream.write({
name: 'foo3',
});
stream.end();
const result = await promise; // { message: 'hello foo1,foo2,foo3' }
const helper = new GRPCHelper({
packageName: 'helloworld',
serviceName: 'Greeter',
protoPath: path.resolve(__dirname, './fixtures/hello.proto'),
sdUri: 'static://localhost:50051',
retryOpts: {
enable: true,
retries: 5,
bailError(err, attempt) {
// Just for example !!! It will not retry when code is 2
return err.code === 2;
},
},
});
await helper.waitForReady();
await helper.SayHello({
name: 'foo',
});
Please take a look at the test folder for more examples.
- Better api
- Doc
- Test code
- Retry on lb level when error
- Auto load proto when only one service available
- Consul/etcd/zk service discovery
This project is licensed under the MIT License - see the LICENSE file for details