@adonis-agora/durable
AdonisJS 的可持久、可更新的工作流程: 将工作流程写成纯音码; 每一步都是 检查完毕,所以跑道能幸存下来 坠机,部署和恢复到最后一步. 步骤可在流程中运行,也可在远程工人(其他Adonis流程、NestJS员工或 Python工人),它保持一个运行的时间段.
node ace add @adonis-agora/durable
定义工作流程 app/workflows/ (自动注册在靴子上):
// app/workflows/order_workflow.ts
import { BaseWorkflow, type WorkflowCtx } from '@adonis-agora/durable'
export default class OrderWorkflow extends BaseWorkflow {
static workflow = { name: 'order', version: '1' }
async run(ctx: WorkflowCtx, order: { id: number; total: number }) {
const charge = await ctx.localStep('charge', async () => chargeCard(order))
await ctx.localStep('ship', async () => ship(charge))
return { status: 'shipped' }
}
}
从控制器开始,并使用引擎服务 其他一切:
import OrderWorkflow from '#workflows/order_workflow'
import engine from '@adonis-agora/durable/services/main'
const { runId } = await OrderWorkflow.dispatch({ id: 1, total: 4200 }, { runId: 'order:1' })
const result = await engine.waitForRun(runId)
默认为内存存储 + 只测试 memory 运输(单一工艺,以下为零).
提供长期储存和跨流程运输 config/durable.ts 用于生产.
何时 @adonis-agora/context 安装了原租户/用户/同族运输机
每一个派遣的任务(最优等,无严重依赖).
完整文档 : https://davidecarvalho.github.io/agora/docs/ducable 页面存档备份,存于互联网档案馆
运输
按名称在 config/durable.ts数字 :
transports.eventEmitter()—— 说 生产 在一个节点上运输EventEmitter零外部基础设施(没有DB、没有Redis、没有经纪人):步骤 处理器在同一过程中运行,与发送工作流程脱钩 事件循环。 用于单流程生产应用.transports.queue({ connection })——跨流程结束@adonisjs/queue。 。 。 .transports.db({ connection })——跨应用程序数据库的跨进程 (单位:千美元)@adonisjs/lucid没有经纪人.transports.bullmq({ connection })——在Redis上的BullMQ上交叉处理相容电线 与雀巢nestjs-durable公牛MQ运输与Python工人. 说对了controlPlanes.redis(...)。 。 。 .transports.memory()——只测试(驱动器)dispatch直入接头.
import { defineConfig, transports } from '@adonis-agora/durable'
export default defineConfig({
transport: 'event-emitter',
transports: {
'event-emitter': transports.eventEmitter(),
},
})
工作流代码( assembler hook)
node ace configure 登记两个AdonisJS 阿森布尔 init 钩子 生成
类型桶 app/workflows/ 财务报告和审定财务报表 app/steps/ 建立/保存时间——核心是如何生成的
控制器/活动/听众桶。 提供者进口生成的
装入桶并登记 BaseWorkflow 类和步骤,而不是扫描
目录 readdir 在运行时间。 文件监视器重生一桶
当工作流程或步骤文件更改时。 桶通过 #workflows/*
财务报告和审定财务报表 #steps/* 子路径导入, 其中 configure 添加到您身边 package.json。 。 。 .
登记在册 adonisrc.ts (单位:千美元) configure 命令执行此任务 :
export default defineConfig({
hooks: {
init: [
() => import('@adonis-agora/durable/hooks/workflows'),
() => import('@adonis-agora/durable/hooks/steps'),
],
},
})
如果钩子没有注册(或枪管尚未生成)
提供者 掉头 到运行时目录扫描,所以不选择加入的应用程序
保持工作不变。 完全脱离发现 workflowsPath: false
(或 stepsPath: false) (中文(简体) ).
一个模块化的应用程序可以列出多个目录: workflowsPath 编号 : stepsPath 带
一个阵列,钩子也一样 source 选项。 名字必须是独特的
这些目录, 冲突失败, 无法命名两个文件 .
许可证
麻省理工学院