QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Ruote,一款由 Ruby 写成的工作流引擎

  • 2010-10-24
  • 本文字数:1088 字

    阅读完需:约 4 分钟

ruote 是一款由 Ruby 写成的工作流引擎,由 John Mettraux,Keneth Kalmer,Torsten Schoenebaum 及其他贡献者共同完成。它已被诸如 ThoughtWorks 和 Rackspace等公司用于支持关键任务的整合

ruote 引擎可同时执行多个流程实例。流程实例是从 Ruby DSL 或 XML(或直接用 JSON)等流程定义中实例化的。流程定义描述了多个参与者间的工作顺序。参与者可以是用户,用户组,服务以及遗留系统等。

ruote 的流程定义描述了多个参与者间的工作顺序。通常,参与者的注册是在引擎启动时发生的,而流程定义则是在发起实例时被解析并转换成一个抽象语义树(简称“树” )并与相应的流程实例相关联。Ruote 主要能够读取三种流程定义:Ruby DSL,XML 和普通树(一般是 JSON)。流程定义中包含一个主流程定义,其中可包含一个或多个子流程定义。例如:

复制代码
<span> 1</span> require <span><span>'</span><span>ruote</span><span>'</span></span> <span># gem install ruote</span>
<span> 2</span>
<span> 3</span> pdef = <span>Ruote</span>.process_definition <span>:name</span> => <span><span>'</span><span>work</span><span>'</span></span> <span>do</span>
<span> 4</span> cursor <span>do</span>
<span> 5</span> concurrence <span>do</span>
<span> 6</span> reviewer1
<span> 7</span> reviewer2
<span> 8</span> <span>end</span>
<span> 9</span> editor
<span><strong>10</strong></span> rewind <span>:if</span> => <span><span>'</span><span>${not_ok}</span><span>'</span></span> <span># back to the reviewers if editor not happy</span>
<span>11</span> publish <span># the document</span>
<span>12</span> <span>end</span>
<span>13</span> <span>end</span>

在 ruote2.1 中,多个 worker 与引擎共享同一存储,而且参与者列表被持久化。ruote-couch 是使用 Apache CouchDB 实现的一种 ruote 存储。ruote-amqp 提供的 AMQP 参与者 / 监听器组合可用于将工作项分发给 AMQP 消费者进行处理,并通过 AMQP 启动流程。

ruote 实现了工作流模式的全系列

  • 顺序、并行、同步、互斥选择、简单聚合
  • 多重选择、结构化同步聚合、多重聚合、结构化鉴别器
  • 任意循环、隐式终止
  • 多实例模式
  • 延迟选择、交叉并行路由、里程碑
  • 任务取消、实例取消

ruote2.0 版是完全重写的,2.1 版的核心也是重写的。几个星期前,他们发布 了2.1.11 。此外,John 还启动了 volute 项目,这是一款状态机的实现。就“顺序工作流”和“状态机”间的差异,John 已在博客中阐述了他的见解。


查看英文原文: Ruote: A Workflow Engine Written in Ruby

2010-10-24 02:255150
用户头像

发布了 184 篇内容, 共 80.7 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

eBPF的发展演进---从石器时代到成为神(三)

统信软件

操作系统 Linux内核

什么是Java 异常?如何处理异常?

Java架构历程

Java 三周年连更

一个有趣的图片加载效果

南城FE

CSS 前端 动画 图片

解析下rte_pktmbuf_pool_create参数含义

linux大本营

DPDK DPDK开发

dpdk l2fwd如何初始化每个逻辑核的port/queue的

linux大本营

队列 DPDK DPDK开发

6G 通信技术和 5G 通信技术的区别

汪子熙

通讯协议 通讯 三周年连更

linux dbus客户端和服务器示例代码

linux大本营

c++ Linux dbus

容量成本性能全都要有, Redis 容量版 PegaDB 设计与实践

百度开发者中心

云数据库 百度智能云

UDP报头是通过结构体位段实现的吗

linux大本营

网络协议 udp UDP协议

共话数字化新技术、新趋势 华为云开发者日东莞站成功举办

Geek_2d6073

dpdk中,如何建立portid/queue的配置和逻辑核心的关系

linux大本营

队列 DPDK DPDK开发

一文带你了解实战常用JavaScript API

程序员海军

JavaScript 三周年连更

数说热点|米哈游新作《崩坏:星穹铁道》今日公测,能否再现原神奇迹?

MobTech袤博科技

对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_cron 和 Amazon Lambda

亚马逊云科技 (Amazon Web Services)

电子签赛道驶向深水区,法大大以数智化引领创新

ToB行业头条

第五期(2022-2023)传统行业云原生技术落地调研报告——金融篇

York

容器 DevOps 微服务 云原生 金融

linux dbus代码举例

linux大本营

Linux C++

扎最深的寨,打最持久的仗——一知智能AI商业化攻略访谈录

B Impact

云BI产品瓴羊Quick BI,为企业数字化转型保驾护航

巷子

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

阿里巴巴云原生

阿里云 云原生 生态合作

什么是文件传输,介绍文件传输的发展进程

镭速

如何使用 SCP 和 Rsync 在 Linux 中传输文件

wljslmz

Linux 三周年连更

Go sync.Once:简约而不简单的并发利器

陈明勇

Go golang 高并发 三周年连更 sync.Once

重载++运算符分别实现i++和++i

linux大本营

运算符 数据结构与算法

来字节跳动实习,有机会发Nature子刊

字节跳动技术范儿

打工人逃不开「单人单岗」

Java 架构 程序人生 职场

openbmc 中如何使用D-bus

linux大本营

dbus openBMC

YashanDB V22.2重磅发布!七大亮点带你了解新特性

YashanDB

数据库

Django笔记十七之group by 分组用法总结

Hunter熊

Python django count 分组查询 sum

写一个完整的SHOW TABLE STATUS 语句返回的所有表的状态信息对应的结构体

linux大本营

数据库 存储 结构体 C++

nvim 配置c++环境

linux大本营

vim C++

Ruote,一款由Ruby写成的工作流引擎_SOA_Jean-Jacques Dubray_InfoQ精选文章