Skip to content

Latest commit

 

History

History
133 lines (95 loc) · 3.14 KB

README.md

File metadata and controls

133 lines (95 loc) · 3.14 KB

fastify-delay-request

Continuous Integration Package Manager CI NPM version GitHub package.json version GitHub

This plugin is used for delaying response to a request while you would like the server to spin-up first and wait some heavy task.

Install

npm install fastify-delay-request --save

yarn add fastify-delay-request

Usage

import FastifyDelayRequest from 'fastify-delay-request'
import * as path from 'path'
import { setTimeout } from 'timers/promises'

fastify.register(FastifyDelayRequest, {
})

fastify.delay.addTask(async function() {
  // do some heavy task here
  await setTimeout(10000)
})

Options

options.concurreny

Maximum number of tasks run in parallel. Default: 1

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  concurreny: 1
})

options.taskTimeout

Maximum millseconds that allow the task to run. It can ensure the server should not wait forever. Default: 60000 (1 min)

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  taskTimeout: 120000
})

options.maxTimeout

Maximum timeout for each delayed request.

Default: 180000 (3 mins)

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  maxTimeout: 240000
})

options.maxRequest

Maximum requests that holds while waiting all tasks finished. You must specify a limited number, otherwise you may face TCP Port Exhaustaion attack or memory-leak.

Default: 100

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  maxRequest: 100
})

options.checkInterval

The interval checks for task finish. Default: 1000 (1s)

import Fastifybree from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  checkInterval: 1000
})

options.onReachLimit

The function that used to return error when maximum request or maximum timeout reached.

You must reply in this handler, otherwise you may by-pass the delay action and reach handler.

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  onReachLimit(request, reply) {
    return reply
      .code(503)
      .header('Retry-After', '240000')
      .send({
        success: false,
        code: 503,
        message: 'Service Unavailable'
      })
  }
})