写点什么

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:255203
用户头像

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

关注

评论

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

武侯祠-创业团队

wood

创业 300天创作 武侯祠 三国

WPF中的一个bug造成CPU资源拉满

喵叔

28天写作 1月月更

盘点 2021|在家办公(偷卷)的一年

悟空聊架构

passjava 悟空聊架构 2021年终总结 盘点 2021

预言机不预测

Rayjun

区块链 预言机

一个cpp协程库的前世今生(八)env的状态与标识位

SkyFire

c++ cocpp

为什么私有方法上的Spring Cache注解不生效?

看点代码再上班

spring 源码 程序员 spring aop Spring Cache

Go编译原理系列3(词法分析)

书旅

Go 编译原理 后端技术

模块八作业-架构实战营

Geek_99eefd

#架构实战营 「架构实战营」

设计消息队列的Mysql表结构

AHUI

「架构实战营」

如何做小程序的产品设计?

石云升

产品设计 产品思维 1月月更

通过 PXE 自动化安装 Ubuntu Server

hedzr

Ubuntu20.04 cloud-init pxe-server bash.sh

节日与科技撞个满怀,一场氛围感的升级

脑极体

Greenplum 内核源码分析 - 分布式事务 (四)

王凤刚(ginobiliwang)

源码分析 分布式事务 最佳实践 greenplum

模块8作业

Asha

Spring 的 BeanFactory 和 FactoryBean 傻傻分不清?

CRMEB

2022 第一天,立 Flag

贾献华

第四周作业

lv

流沙·进化岛|编程、艺术、新媒体等皆可学(你的终身进化岛1000+人)

AI悦创

AI悦创

01-大规模异步新闻爬虫:简单的新闻爬虫

AI悦创

LabVIEW轮廓分析与比较(基础篇—8)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 轮廓分析与比较

架构实战营模块八作业

spark99

架构实战营

链游平台 Gacube Finance 登陆虎符Hoo Labs空投

区块链前沿News

Hoo 虎符交易所 GaCubeFinance

[架构实战营]模块五

Vincent

「架构实战营」

模块8作业

21°Char

模块八作业

doublechun

架构师实战营

第八单元总结

张靖

#架构实战营

架构实战营模块八作业

孙志强

架构实战营

产品规划:以终为始

石云升

产品规划 1月月更

基于MySQL消息队列存储方案设计

天天向上

架构实战营

架构训练营 -- 模块五

LJK

架构训练营

flink输出到iceberg

聚变

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