持久任务 Javascript
此 repo 包含一个 Javascript 客户端 SDK , 用于与 长期任务框架 财务报告和审定财务报表 Dapr 工作流程。使用这个SDK,您可以使用普通的Javascript代码定义、安排和管理持久的管弦乐.
该SDK目前正在积极开发中,尚未准备好用于生产.
请注意,这个项目是: 没有 目前隶属于联合国 持久函数 azure 函数项目.
⚠️ 该SDK目前正在积极开发中,尚未准备好用于生产. ⚠️
支持的模式
目前支持以下管弦乐模式.
函数链
管弦乐可以使用下列语法将一系列函数调用连锁:
function hello(ctx: ActivityContext, name: string): string {
return `Hello ${name}!`;
}
const sequence: TOrchestrator = async function* (ctx: OrchestrationContext): any {
const cities = [];
const result1 = yield ctx.callActivity(hello, "Tokyo");
cities.push(result1);
const result2 = yield ctx.callActivity(hello, "Seatle");
cities.push(result2);
const result3 = yield ctx.callActivity(hello, "London");
cities.push(result3);
return cities;
};
你可以找到完整的样本 这里。 。 。 .
范-出/范-因
管弦乐可以同时扇出动态数函数调用,然后使用以下语法扇入结果:
# activity function for getting the list of work items
function getWorkItems (ctx: ActivityContext): string[] {
//...
}
function processWorkItem(ctx: ActivityContext): number {
//...
}
const orchestrator: TOrchestrator = async function* (ctx: OrchestrationContext): any {
const tasks = [];
const workItems = yield ctx.callActivity(getWorkItems);
for (const workItem of workItems) {
tasks.push(ctx.callActivity(processWorkItem, workItem));
}
const results = yield whenAll(tasks);
return results
}
你可以找到完整的样本 这里。 。 。 .
人类互动和持久的定时器
一个管弦乐团可以等待用户定义的事件,比如人类的认可事件,然后推向下一步. 此外,管弦乐还可以创建一个具有任意持续时间的定时器,如果外部事件没有收到,则触发一些替代动作:
const orchestrator: TOrchestrator = async function* (ctx: OrchestrationContext, order: Order): any {
if (order.cost < 1000) {
return "Auto-approvied";
}
yield ctx.callActivity(sendApprovalRequest, order);
const approvalEvent = ctx.waitForExternalEvent("approval_received");
const timerEvent = ctx.createTimer(10 * 60);
const winner = yield whenAny([approvalEvent, timerEvent]);
if (winner == timerEvent) {
return "Canceled";
}
ctx.callActivity(placeOrder, order);
const approvalDetails = approvalEvent.getResult();
return `Approved by ${approvalDetails.approver}`;
};
顺便说一句,你也会注意到上面的"管弦乐"这个例子与自定义的商业对象有作用. 支持自定义商务对象包括支持自定义类,自定义数据类,并被命名为tuples. 这些物体的串行和去串行由SDK自动处理.
你可以找到完整的样本 这里。 。 。 .
特征概述
目前支持以下功能:
管弦乐
使用普通 Python 函数执行管弦 OrchestrationContext 作为他们的第一参数。 这个 OrchestrationContext 提供API, 以启动儿童管弦乐、安排活动和等待外部活动等。 管弦乐团是容错和耐久的,意思是它们可以自动从故障中恢复,并重建其局部执行状态. 整形器的功能必须是决定性的,即它们必须始终产生相同的输入输出.
活 动
使用普通 Python 函数执行活动 ActivityContext 作为他们的第一参数。 活动功能由管弦乐安排,并有至少一次执行的保证,这意味着它们至少会被执行一次,但在瞬间失败时可能会被多次执行. 活动功能是任何管弦乐的真正"工作"完成的地方.
持久计时器
管弦可以使用 create_timer API (英语). 这些计时器具有耐用性,这意味着它们会活过管弦乐手重启并会开火,即使管弦乐手在记忆中并不积极. 耐用计时器可以是任何持续时间,从毫秒到几个月.
分节奏
管弦乐可以使用 call_sub_orchestrator API (英语). 儿童管弦乐有助于封装复杂的逻辑,并可以将大型管弦乐分解为更小,更可管理的片段.
外部活动
管弦乐可以使用 wait_for_external_event API (英语). 外部活动对于实施人类互动模式很有用,例如等待用户在继续前批准订单.
继续更新
管弦乐可以继续作为新的使用 continue_as_new API (英语). 这个API允许一个管弦乐从头开始重启,可以选择使用新的输入.
暂停、恢复和终止
管弦可以使用 suspend_orchestration 客户端 API 并将暂停,直到恢复使用 resume_orchestration 客户端 API. 暂停的管弦乐将停止处理新事件,但将继续缓冲任何偶然到达的事件,直到恢复,确保不丢失数据. 也可以使用 terminate_orchestration 客户端 API. 终止的管弦乐将停止处理新事件,并放弃任何缓冲事件.
重试政策( TODO)
管弦乐团可以规定活动和子管弦乐的重试政策. 这些政策控制了发生瞬间出错时某项活动或分会有多少次和多少次重复试验.
开始
先决条件
- 节点.js 18或以上
- 与任务相容的长相机车 Dapr 工作流程
运行样本
见 实例 样本管弦乐列表和如何操作的指令目录.
发展
生成原生体
Protobuf定义储存在 ./分模块/可完成的任务 目录,这是一个子模块。 要更新子模块, 请从工程根运行以下命令 :
git submodule update --init
一旦子模块可用,相应的源代码可以使用以下命令从项目根重生成: 1
npm install grpc_tools_node_protoc_ts --save-dev
# generate js codes via grpc-tools
grpc_tools_node_protoc \
--js_out=import_style=commonjs,binary:src/proto \
--grpc_out=grpc_js:src/proto \
--plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` \
-I ./submodules/durabletask-protobuf/protos orchestrator_service.proto
protoc \
--plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts \
--ts_out=grpc_js:src/proto \
-I ./submodules/durabletask-protobuf/protos orchestrator_service.proto
运行单元测试
单位测试可以使用以下来自项目根的指令运行. 单位测试 别 需要运行侧车进程.
npm run test:unit
运行 E2E 测试
要运行 E2E 测试, 请从工程根运行以下命令 :
npm run test:e2e
此命令将启动一个耐用任务旁车道克容器(cgillum/可耕地- sidecar:latest).
捐款
该项目欢迎各方的贡献和建议。 大多数捐款要求您同意 撰稿人许可协议(CLA)宣布,你有权并且实际上确实给了我们 有权使用您的贡献。 详情请访问 https://cla.opensource.microsoft.com 互联网档案馆的存檔,存档日期2014-10-02。 。 。 .
当您提交拉拉请求时, CLA bot 会自动确定您是否需要提供 a CLA并适当装饰PR(如状态检查、评论)。 只要听从指示 由机器人提供。 你只需要用我们的CLA 一次就能完成.
该项目通过了 Microsoft 开源行为守则。 。 。 . 更多信息见 《行为守则》 或者说 联系人 打开码@ microsoft.com 并附上任何其他问题或评论.
商标
本项目可能包含项目,产品或服务的商标或标志. 授权使用微软 商标或标志必须遵循 微软的商标和品牌准则。 。 。 . 在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助. 任何使用第三方商标或标志的行为都必须遵守这些第三方的政策.