写点什么

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

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

关注

评论

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

毕业总结

babos

#架构实战营

从0-1教你利用服务器做属于自己的个人博客

坚果

git 博客 服务器 nodejs 11月日更

Scrum Master们,难道每天都在摸鱼

华为云开发者联盟

摸鱼 敏捷教练 开发团队 Scrum Master 领导

基于软件分析的智能化开发新型服务与技术

华为云开发者联盟

程序员 开发 漏洞 软件分析 智能开发

领域驱动设计简介

android 程序员 移动开发

Android C++ 系列:JNI数组操作

轻口味

android 11月日更

微信朋友圈复杂度分析

豪毅

架构实战营

【Flutter 专题】15 图解 ListView 异步加载数据与 Loading 等待

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

CSS响应式布局之REM(二)

Augus

CSS 11月日更

Vue进阶(幺陆玖):JS 垃圾回收机制

No Silver Bullet

Vue GC 11月日更

什么是开源软件和自由软件,你真的了解吗

耳东@Erdong

开源软件 11月日更 自由软件

如何从 JavaScript 中的数组中删除空元素?

devpoint

JavaScript filter 11月日更

dart系列之:dart语言中的内置类型

程序那些事

flutter dart 程序那些事 11月日更

Elastic-Job的执行原理及优化实践

安第斯智能云

Java 架构 分布式 后端

MySQL 默认隔离级别是RR,为什么阿里这种大厂会改成RC?

Hollis

高级UI强行进阶:自定义View实现女朋友欲罢不能的网易云音乐宇宙尘埃特效,拿去装笔不用谢~

android 程序员 移动开发

Java 自定义注解(二)

程序员架构进阶

Java 注解 11月日更

解锁WiFi密码,我只用了60行代码....

Jackpop

外包学生管理系统的架构

胡颖

高仿知乎日报无限轮播图+指示符切换动画效果

android 程序员 移动开发

linux之我常用的20条命令( 之三)

入门小站

Linux

在线文本转2-36任意进制工具

入门小站

工具

架构实战营模块三作业

孙志强

架构实战营

开源应用中心|最好用的5款开源论坛软件,你知道吗?

开源 博客 开源软件 论坛

鸿洋:拖不得了,Android11真的要来了,最全适配实践指南奉上

android 程序员 移动开发

[ CloudWeGo 微服务实践 - 06 ] 服务发现(2)

baiyutang

golang 微服务 11月日更

模块九—电商秒杀系统

babos

#架构实战营

【Promise 源码学习】第一篇 - Promise 简介

Brave

源码 Promise 11月日更

vivo 全球商城:商品系统架构设计与实践

vivo互联网技术

软件架构 架构设计 商城项目

【LeetCode】只出现一次的数字 IIIJava题解

Albert

算法 LeetCode 11月日更

极复杂编码,下载《原神》角色高清图、中日无损配音,爬虫 16 / 120 例

梦想橡皮擦

11月日更

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