npm version npm downloads dependencies dev dependencies Build Status
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