由于最近自己写点小东西,需要有工作流程管理方面的应用,所有的环境为Ruby on rails,所有在选择流程引擎的时候选择了ruote,但是对于ruote是完全陌生的,所以在这里记下点滴,如果理解的不正确,还请大家批评指正。

Ruote:用Ruby写的一个工作流引擎。

开始了解Ruote先要了解几个很重要的概念:

  •     storage 是ruote的核心,保存这所有的持续流程。Storage实现线程安全,多个工作可以同时使用。
  •     worker   围绕在Storage周围的流程本省。
  •     engine(dashboard)  包含一些图标和按钮,是所有进程实例的控制面板,能够对进程实例就行运行,暂停,取消操作。   

下面是一个Ruote的配置:

 require 'ruote'
require 'ruote/storage/fs_storage' engine = Ruote::Engine.new(Ruote::Worker.new(Ruote::FsStorage.new('work')))

这是一个最简单的配置,将engin,worker和storate包装在一起。

Engine的配置选项实际上是在初始化的时候传递给存储的,比如:

 require 'ruote'
require 'ruote/storage/fs_storage' engine = Ruote::Engine.new(
Ruote::Worker.new(
Ruote::FsStorage.new(
'work',
'remote_definition_allowed' => true, 'ruby_eval_allowed' => true)))

也可以向下面这样定义:

 engine = Ruote::Engine.new(
Ruote::Worker.new(
Ruote::FsStorage.new('work'))) engine.configure('remote_definition_allowed', true)
engine.configure('ruby_eval_allowed', true)

Engin的配置项:

participant_threads_enabled(自从ruote2.3.0版本开始,默认情况是true)

        默认情况下, 从work中调度一个流程给参与者的时候都用一个新的Ruby线程。这样在默认情况下不会阻塞worker。

remote_definition_allowed(默认情况下是false)

         Remote definitions 是通过Http协议过程定义。因为过程定义是代码,默认情况下用如下方法是不允许的:

 Ruote.process_definition :name => 'main process' do
sequence do
subprocess 'http://example.com/definitions/head_process.rb'
subprocess 'http://example.com/definitions/tail_process.rb'
end
end # or engine.variables['head'] = 'http://example.com/definitions/head_process.rb'
engine.variables['tail'] = 'http://example.com/definitions/tail_process.rb' Ruote.process_definition :name => 'main process' do
sequence do
head
tail
end
end # or simply engine.launch('http://example.com/definitions/main.xml')

如果要使用如上的定义,那么应该将‘remote_definition_allowed的选项设置为"true"。

     ruby_eval_allowed:(默认是false)

     wait_logger_max:(默认是147)

     这个设置只是在开发测试环境中一个worker的情况,在其他环境下不用管这个配置。WaitLogger是ruote的一个组件,追踪147个最近的本地工作流程的处理信息。                   preserve_configuration:(默认是false)

当这个配置设置为true的时候,engine,worker,storage将不向存储后面持续工作流程写配置。适用于多个工作流程一起运行的情境下。

     restless_worker:(默认是false)

更像是一个工作流程的配置,当设置为true的时候,工作流程在提取信息和定时调度执行期间就不会sleep。

     worker_state_enabled:(默认是false)

     当设置为true的时候,将Ruote::Dashboard中的worker_state解锁,可能的状态包括running,paused,stopped.工作流读取状态执行相应的running,paused,stop操作。

     engine on_error / on_terminate:

engine在发生错误和终止的时候触发的事件或者参与者,如下定义:

 # you can pass a participant name
engine.on_error = 'administrator' # or a subprocess name
engine.on_error = 'error_procedure' # or directly a subprocess definition
engine.on_error = Ruote.define do
concurrence do
administrator :msg => 'something went wrong'
supervisor :msg => 'something went wrong'
end
end

worker:

目前为止,没有为worker的配置。

storage:

工作流、业务处理被人调用,持续好长时间,数据的持久性是必须的,storage用来保存数据。因为所有的工作流程共享storage,所以不仅要提供可靠的持久数据,而且可以避免工作流之间的冲突。

下面这个表中是实现的storage类型:

multiple workers:storage是否支持多个工作流程。

remote worker:现实工作流程是不是和storage在一个主机上

speed :显示storage的速度排行。

Ruote::HashStorage:

一个字内存中临时的storage,不能够在多个工作流程中共享,大多数用于测试或者临时的工作流程。

Ruote::FsStorage:

以json的格式将ruote的信息保存成文件,可以在多个工作流程中共享数据。

Ruote::Redis::Storage:

基于redis的storage,很快,在多个工作流程的情况下使用。

Ruote::Sequel::Storage:

通用的持久storage,使用Mysql或者PostgreSQL,在多个工作流程的情况下使用。

Ruote::Dm::Storage:

一个 DataMapper storage 实现。

Ruote::Couch::Storage:

一个基于 CouchDB 的Storage实现。

Ruote::Mon::Storage:

MongoDB storage 实现。

Ruote::Beanstalk::BsStorage:

提供一种技术,使FsStorage可以被远程的工作流程可以使用。

十分想找对ruote熟悉的朋友共同学习。

workflow engine Ruote初体验之一(概念)的更多相关文章

  1. workflow engine Ruote初体验之三(条件与美元符号)

    条件 我们可以用:if和:unless公共属性来进行条件判断,或者使用if,given,once或者equals(已经过时)关键字. 使用:if属性: 1 cursor do 2 participan ...

  2. workflow engine Ruote初体验之二(通用属性)

    罗列一下表达式所支持的属性: :timeout :if/ unless :forget :lose :flank :on_error :on_cancel :on_timeout :tag :filt ...

  3. workflow engine Ruote 安装

    今天在安装gem安装Ruote的过程中遇到问题,改用bundle安装: steven@steven-Latitude-D630:/usr$ sudo mkdir bundel [sudo] passw ...

  4. RPC框架基础概念理解以及使用初体验

    RPC:Remote Procedure Call(远程服务调用) RPC是做什么的 通过RPC框架机器A某个进程可以通过网络调用机器B上的进程方法,就像在本地上调用一样. RPC可以基于HTTP或者 ...

  5. django初体验 学习笔记

    django环境搭建     1.安装Python     2.ipython         sudo apt-get install ipython         sudo pip instal ...

  6. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  7. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  8. protobuf初体验

    概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...

  9. Knockout.js初体验

    前不久在网上看到一个轻量级MVVM js类库叫Knockout.js,觉得很好奇,搜了一下Knockout.js相关资料,也初体验了一下,顿时感觉这个类库的设计很有意思.接下来就搞清楚什么是Knock ...

随机推荐

  1. Fragment 和 Activity 之间通信

    在 Activity 中获取 Fragment 实例: FragmentManager 提供了一个类似于 findViewById 的方法,专门用于从布局文件中获取 Fragment 实例: //通过 ...

  2. Asp.net自定义控件开发任我行(4)-ViewState保存控件状态

    摘要 上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态 内容 我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按 ...

  3. Normal synchronous FIFO mode 和 Show-ahead synchronous FIFO mode

    FIFO是先进先出,可以用fifo来处理跨时钟域的数据传输问题,用到的地方特别多,一定要搞会. 在学习调用fifo的IP核中发现有normal synchronous FIFO mode 和 Show ...

  4. c++面试须知

    这些都是从zhihu上看到的. 指针,多态(虚函数表.内存layout),作用域,内存的管理 算法与数据结构,数据结构上由掌握哈希.优先级队列,算法上有字符串处理,简单的DFS.BFS.动态规划 系统 ...

  5. js获取触发事件的元素

    //获取事件 var e = window.event; //获取元素 obj = e.target || e.srcElement; console.log(e); checkRepeat(e.ta ...

  6. [HDU3480] Division [四边形不等式dp]

    题面: 传送门 思路: 因为集合可以无序选择,所以我们先把输入数据排个序 然后发先可以动归一波 设$dp\left[i\right]\left[j\right]$表示前j个数中分了i个集合,$w\le ...

  7. [ZJOI2012][bzoj 2816] 网络 network [LCT]

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2816 思路: 第一个条件看完暂时还没什么想法 看完第二个,发现每一个颜色都是一个森林 进而想 ...

  8. BZOJ 3625 [Codeforces Round #250]小朋友和二叉树 ——NTT 多项式求逆 多项式开根

    生成函数又有奇妙的性质. $F(x)=C(x)*F(x)*F(x)+1$ 然后大力解方程,得到一个带根号的式子. 多项式开根有解只与常数项有关. 发现两个解只有一个是成立的. 然后多项式开根.求逆. ...

  9. javascript new关键字做了什么

    基本过程 1.创建一个空对象2.空对象的原型指向其构造函数的原型属性3.执行构造函数,且构造函数的this指向该对象4.判断构造函数返回值类型,若为值类型,返回空对象本身,若为引用类型,返回这个引用类 ...

  10. 如何在Ionic2项目中使用第三方JavaScript库

    onic的官网放出一记大招Ionic and Typings,来介绍如何在Ionic2项目中使用第三方JavaScript库. 因为在前阵子正好想用一个非常有名的第三方JS库ChartJs来实现一些东 ...