写点什么

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

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

关注

评论

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

阿里大牛首次公布Java10W字八股文面经,Github访问量破百万

Java 编程 程序员 架构 面试

通过题目来讲一讲计算机系统概述相关知识 3 | 计算机组成与系统结构专题

Regan Yue

计算机组成原理 10月月更

优雅代码技巧

十二万伏特皮卡丘

[ CloudWeGo 微服务实践 - 02 ] 上手

baiyutang

golang 微服务 10月月更

OCR+NLP信息抽取在金融、物流行业的应用

百度大脑

人工智能 百度

使用 Spring Boot 和 @DataJpaTest 测试 JPA 查询

码语者

Java Spring Boot test

Android 音视频 - MediaCodec 编解码音视频

声网

android 音视频 编解码

少吃肉也能减碳排?

脑极体

带你了解3类预训练语音模型预测方法

华为云开发者联盟

语音 预训练 语音模型 前文 后文

微信朋友圈的复杂度分析

胡颖

架构实战营

Python代码阅读(第48篇):返回最大元素的索引

Felix

Python 编程 Code Programing 阅读代码

030云原生之交付部署

穿过生命散发芬芳

云原生 10月月更

linux之zgrep查找压缩包文件文本

入门小站

Linux

作业:模块一

奔奔

Vue进阶(幺伍肆):vue-resource 应用

No Silver Bullet

Vue vue-resource 10月月更

OCR+NLP 提取信息并分析,这个开源项目火了!

百度开发者中心

最佳实践 开源技术

CODING 助力江苏高速信息实现组织敏捷与研发敏捷,领跑智慧交通新基建

CODING DevOps

研发敏捷 组织敏捷 自动化发布流程 团队目标一致性 楼宇智能化

ES入门教程

阿强

elasticsearch elastic ES

精益求精,零代码训练营第五期顺利结业

明道云

永不落幕的世界智能盛会:天津市工业和信息化局与工商银行天津分行举行对接交流活动

InfoQ 天津

第六届世界智能大会平行论坛提前揭晓

InfoQ 天津

网易云信 6 周年|以梦为马,谱写融合通信新篇章

网易云信

云通信 通信云

泛型原理解析(Review)

Puciu

泛型

科技赋能乡村振兴,农林牧渔如何“拥抱”区块链技术?

CECBC

OpenSearch 文档如何进行编译

HoneyMoose

如何成为一个更好的职业人?

石云升

学习笔记 职场经验 10月月更

北森CEO纪伟国:深耕HR SaaS,聚焦场景一体化

海比研究院

浅谈如何实现自定义的 iterator

hedzr

stl Iterator c++17

虚拟人“觉醒”年,见证一场万物的进化

脑极体

中国央行数字货币DCEP——有增值空间吗?

CECBC

文本逆序翻转工具

入门小站

工具

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