Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Byndyusoft/grpc-timeouts
A library for customizable gRPC timeouts
https://github.com/Byndyusoft/grpc-timeouts
circuit-breaker fail-fast grpc nodejs timeouts typescript
Last synced: 2 months ago
JSON representation
A library for customizable gRPC timeouts
- Host: GitHub
- URL: https://github.com/Byndyusoft/grpc-timeouts
- Owner: Byndyusoft
- License: mit
- Created: 2020-12-29T12:38:43.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2021-03-09T10:07:05.000Z (over 3 years ago)
- Last Synced: 2024-05-05T15:43:53.611Z (2 months ago)
- Topics: circuit-breaker, fail-fast, grpc, nodejs, timeouts, typescript
- Language: TypeScript
- Homepage:
- Size: 176 KB
- Stars: 1
- Watchers: 5
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Lists
- awesome-byndyusoft-opensource - grpc-timeouts - A library for customizable gRPC timeouts (Node.js / Using in legacy projects)
README
# grpc-timeouts
[![npm version](https://img.shields.io/npm/v/@byndyusoft/grpc-timeouts)](https://www.npmjs.com/package/@byndyusoft/grpc-timeouts)
[![npm downloads](https://img.shields.io/npm/dt/@byndyusoft/grpc-timeouts)](https://www.npmjs.com/package/@byndyusoft/grpc-timeouts)
[![dependencies](https://img.shields.io/david/Byndyusoft/grpc-timeouts)](https://www.npmjs.com/package/@byndyusoft/grpc-timeouts)
[![dev dependencies](https://img.shields.io/david/dev/Byndyusoft/grpc-timeouts)](https://www.npmjs.com/package/@byndyusoft/grpc-timeouts)
[![Build Status](https://img.shields.io/github/workflow/status/Byndyusoft/grpc-timeouts/test%20workflow/master)](https://github.com/Byndyusoft/grpc-timeouts/actions?query=workflow%3A%22test+workflow%22)## Table of contents
- [About](#about)
- [Installation](#installation)
- [Usage](#usage)
- [API](#api)
- [CircuitBreaker](#circuitbreaker)
- [serverInterceptor](#serverinterceptor)
- [clientInterceptor](#clientinterceptor)
- [Type Definitions](#typedefinitions)
- [ICircuitBreakerOptions](#icircuitbreakeroptions)
- [ITimeouts](#itimeouts)
- [IServerInterceptor](#iserverinterceptor)
- [IClientInterceptor](#iclientinterceptor)
- [Related](#related)
- [Maintainers](#maintainers)## About
`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).## Release New version
For new version use https://github.com/semantic-release/semantic-release description.
We must set commit message fix(pencil): New feature in release## Installation
`npm i @byndyusoft/grpc-timeouts`
## Usage
**:warning: Make sure that CircuitBreaker interceptors is the last added interceptor, because it will interrupt further processing of the request!**
```js
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()
```## API
### CircuitBreaker
`constructor([options: ICircuitBreakerOptions])`Options is an optional object with timeouts for methods (default timeout is 10 seconds).
#### serverInterceptor
`IServerInterceptor`Server interceptor function.
#### clientInterceptor
`IClientInterceptor`Client interceptor function.
## Type Definitions
### ICircuitBreakerOptions
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
```js
{
timeouts: {
createOrder: 3000,
updateOrder: 500,
deleteOrder: 500,
getOrder: 300,
default: 5000 //default was 10000
},
minResponseTimeouts: {
createOrder: 280,
default: 50 //default was 0
}
}
```
### ITimeouts
An object which keys is camelCased method names and values is milliseconds. \
This object also have `default` field that can be reassigned.### IServerInterceptor
`(call: Object, methodDefinition: Object, next: Function) => Promise` \
A function that can be used as server interceptor.### IClientInterceptor
`(options: Object, next: Function) => grpc.InterceptingCall` \
A function that can be used as client interceptor.## Related
[grpc-host-builder](https://www.npmjs.com/package/grpc-host-builder)## Maintainers
@Byndyusoft/owners: https://github.com/orgs/Byndyusoft/teams/owners, [email protected]