@ fastify/ 断路器
低额管理费 断路器 为你的路线.
安装
npm i @fastify/circuit-breaker
兼容性
| 插件版本 | 快速化版本 |
|---|---|
>=4.x | ^5.x |
^3.x | ^4.x |
>=1.x <3.x | ^3.x |
^0.x | ^2.x |
^0.x | ^1.x |
请注意,如果一个快取版本没有支持,那么该插件的相应版本也一样 上表列出. 见 快速化 LTS 政策 更多细节.
使用量
注册插件,并在必要时通过自定义选项.
此插件将添加一个 onSend 钩上并暴露 circuitBreaker 函数.
打电话 fastify.circuitBreaker() 当宣布 preHandler 选项,您将以此方式将该非常具体的路径置于 断路 检查.
const fastify = require('fastify')()
fastify.register(require('@fastify/circuit-breaker'))
fastify.register(function (instance, opts, next) {
instance.route({
method: 'GET',
url: '/',
schema: {
querystring: {
error: { type: 'boolean' },
delay: { type: 'number' }
}
},
preHandler: instance.circuitBreaker(),
handler: function (req, reply) {
setTimeout(() => {
reply.send(
req.query.error ? new Error('kaboom') : { hello: 'world' }
)
}, req.query.delay || 0)
}
})
next()
})
fastify.listen({ port: 3000 }, err => {
if (err) throw err
console.log('Server listening at http://localhost:3000')
})
选项
您可以在插件注册期间通过以下选项, 这样所有路由都会使用这些值 .
fastify.register(require('@fastify/circuit-breaker'), {
threshold: 3, // default 5
timeout: 5000, // default 10000
resetTimeout: 5000, // default 10000
onCircuitOpen: async (req, reply) => {
reply.statusCode = 500
throw new Error('a custom error')
},
onTimeout: async (req, reply) => {
reply.statusCode = 504
return 'timed out'
}
})
threshold:打开回路前接受的最大故障次数.timeout:返回前最多可等待的毫秒数TimeoutError。 。 。 .resetTimeout: 电路移动前的毫秒数open改为half-openonCircuitOpen: 当电路是open由于错误。 它可以修改答复并返回 astring|Buffer|Stream载荷。 如果一个Error它将被扔到您的错误处理器.onTimeout: 当电路是open由于超时。 它可以修改答复并返回 astring|Buffer|Stream|Error载荷。 如果一个Error它将被扔到您的错误处理器.
否则,您可以自定义每条路线,将相同的选项传递到 circuitBreaker 工具栏 :
fastify.circuitBreaker({
threshold: 3, // default 5
timeout: 5000, // default 10000
resetTimeout: 5000 // default 10000
})
如果将选项直接传递给工具,则它优先于全局配置.
自定义错误消息
如果需要, 您可以更改默认错误消息 电路打开出错 编辑 超时出错数字 :
fastify.register(require('@fastify/circuit-breaker'), {
timeoutErrorMessage: 'Ronf...', // default 'Timeout'
circuitOpenErrorMessage: 'Oh gosh!' // default 'Circuit open'
})
洞穴
由于无法应用模式的经典超时功能,在此情况下,超时将测量执行和 一旦路线完成 如果所花费的时间超过超时, 它会返回一个错误, 即使路线已经产生一个成功的响应.
如果您需要经典的断路器来包围 API 调用 easy-breaker。 。 。 .
承认
图片来源: 马丁·福勒。 。 。 .
许可证
许可证根据 麻省理工学院。 。 。 .