阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

程序员• 后浪

古时的风筝

程序员 后浪

时间足够爱你

rmrf

学习 思考 持之以恒

Redis学习笔记(列表类型)

编程随想曲

redis

聊聊Redis SDS

huizhou92

redis

无所不能 就像妈妈一样

Neco.W

思考 情绪

回"疫"录(10):危机与希望

小天同学

疫情 回忆录 现实纪录 纪实

架构师快问快答2

IT民工大叔

深入浅出虚拟内存

泰伦卢

c c++ C#

电脑城最简单骗局,仍然有无数人上当

周三不加班

电脑城 电脑选购

C++中glog源码剖析以及如何设计一个高效 log模块

泰伦卢

c c++ C#

和孩子聊聊死亡

陈医僧Ethan

感悟 育儿

DDD 实践手册(5. Factory 与 Repository)

Joshua

企业架构 设计模式 领域驱动设计 DDD 架构模式

自助设备系列——增长点

孙苏勇

产品 行业资讯 智能设备

Netty 源码解析(八): 回到 Channel 的 register 操作

猿灯塔

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (三)单元测试在整个测试体系中的位置

编程道与术

软件测试 TDD 单元测试 集成测试 验收测试

MacOS高效使用指南-我的体系化方案以及软件清单

lmymirror

高效工作 效率工具 知识管理 Mac 操作系统

go 怎样做 stw

huizhou92

Go 语言

工作感悟随笔

程序员小岑

感悟

数据湖引擎是什么鬼

数据社

大数据 数据仓库 数据湖 数据架构

游戏开发通用技术和工具

波波

编程 游戏开发 H5游戏

Java并发编程--ReentrantLock

Java收录阁

并发编程

想看懂stl代码,先搞定type_traits是关键

泰伦卢

c c++ C#

理解go 的 sort

huizhou92

Go 语言

未完成乞丐版 Args

escray

学习 CSD 认证实战营

Java并发编程基础--Java内存模型

Java收录阁

程序员《后浪》-图文版

Java_若依框架教程

后浪 程序媛 娱乐

Web百度离线地图开发

玏佾

WebGIS 离线地图 Web离线地图

C++ sqlite3使用指南

泰伦卢

c c++ C#

每日算法之leetcode 50 Power

田镇珲

递归 LeetCode 分治

关于 WordPress-Automatic 的分布式办公实践

刘培培

分布式办公 远程办公

作为自由职业者,我的近况

一尘观世界

程序员 自由职业 复盘

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