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

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

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

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

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

在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

 

你可能感兴趣的:(Ruote,一款由Ruby写成的工作流引擎)