grpc-timeouts
is a small library that makes it easy to add customizable timeouts to your services. The library implements a circuit breaker pattern, which means that if the request exceeds the deadline, no further requests will be sent. If the deadline for a received request has expired, the request will not be processed and service instantly answers with code 4 (Deadline exceeded).
For new version use https://github.com/semantic-release/semantic-release description. We must set commit message fix(pencil): New feature in release
npm i @byndyusoft/grpc-timeouts
const grpc = require("grpc")
const { CircuitBreaker } = require("@byndyusoft/grpc-timeouts");
const circuitBreaker = new CircuitBreaker();
/*...*/
// Client interceptor:
const client = new grpc.Client(address, credentials, {
interceptors: [circuitBreaker.clientInterceptor]
});
// Server interceptor: (with grpc-host-builder)
const server = new GrpcHostBuilder()
.addInterceptor(circuitBreaker.serverInterceptor)
.addService(myService)
.bind(grpcBind)
.build()
constructor([options: ICircuitBreakerOptions])
Options is an optional object with timeouts for methods (default timeout is 10 seconds).
IServerInterceptor
Server interceptor function.
IClientInterceptor
Client interceptor function.
An object with following keys:
[timeouts: ITimeouts]
- The longest time for the methods to respond[minResponseTimeouts: ITimeouts]
- The shortest time to wait for a response from the services
{
timeouts: {
createOrder: 3000,
updateOrder: 500,
deleteOrder: 500,
getOrder: 300,
default: 5000 //default was 10000
},
minResponseTimeouts: {
createOrder: 280,
default: 50 //default was 0
}
}
An object which keys is camelCased method names and values is milliseconds.
This object also have default
field that can be reassigned.
(call: Object, methodDefinition: Object, next: Function) => Promise<Object>
A function that can be used as server interceptor.
(options: Object, next: Function) => grpc.InterceptingCall
A function that can be used as client interceptor.
@Byndyusoft/owners: https://github.com/orgs/Byndyusoft/teams/owners, github.maintain@byndyusoft.com