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.
npm install fastify-delay-request --save
yarn add fastify-delay-request
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)
})
Maximum number of tasks run in parallel. Default: 1
import FastifyDelayRequest from 'fastify-delay-request'
fastify.register(FastifyDelayRequest, {
concurreny: 1
})
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
})
Maximum timeout for each delayed request.
Default: 180000 (3 mins)
import FastifyDelayRequest from 'fastify-delay-request'
fastify.register(FastifyDelayRequest, {
maxTimeout: 240000
})
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
})
The interval checks for task finish. Default: 1000 (1s)
import Fastifybree from 'fastify-delay-request'
fastify.register(FastifyDelayRequest, {
checkInterval: 1000
})
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'
})
}
})