workflow engine Ruote初體驗之一(概念)

     因爲最近本身寫點小東西,須要有工做流程管理方面的應用,全部的環境爲Ruby on rails,全部在選擇流程引擎的時候選擇了ruote,可是對於ruote是徹底陌生的,因此在這裏記下點滴,若是理解的不正確,還請你們批評指正。    redis

     Ruote:用Ruby寫的一個工做流引擎。sql

    開始瞭解Ruote先要了解幾個很重要的概念:mongodb

  •     storage 是ruote的核心,保存這全部的持續流程。Storage實現線程安全,多個工做能夠同時使用。
  •     worker   圍繞在Storage周圍的流程本省。
  •     engine(dashboard  包含一些圖標和按鈕,是全部進程實例的控制面板,可以對進程實例就行運行,暫停,取消操做。   

      

     下面是一個Ruote的配置:     apache

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

     這是一個最簡單的配置,將engin,worker和storate包裝在一塊兒。json

     Engine的配置選項其實是在初始化的時候傳遞給存儲的,好比:     安全

1 require 'ruote'
2 require 'ruote/storage/fs_storage'
3  
4 engine = Ruote::Engine.new(
5   Ruote::Worker.new(
6     Ruote::FsStorage.new(
7       'work',
8       'remote_definition_allowed' => true, 'ruby_eval_allowed' => true)))

也能夠向下面這樣定義:ruby

1 engine = Ruote::Engine.new(
2   Ruote::Worker.new(
3     Ruote::FsStorage.new('work')))
4  
5 engine.configure('remote_definition_allowed', true)
6 engine.configure('ruby_eval_allowed', true)

 

Engin的配置項:app

      participant_threads_enabled(自從ruote2.3.0版本開始,默認狀況是true)less

        默認狀況下, 從work中調度一個流程給參與者的時候都用一個新的Ruby線程。這樣在默認狀況下不會阻塞worker。學習

       remote_definition_allowed(默認狀況下是false)

         Remote definitions 是經過Http協議過程定義。由於過程定義是代碼,默認狀況下用以下方法是不容許的:

 1 Ruote.process_definition :name => 'main process' do
 2   sequence do
 3     subprocess 'http://example.com/definitions/head_process.rb'
 4     subprocess 'http://example.com/definitions/tail_process.rb'
 5   end
 6 end
 7  
 8 # or
 9  
10 engine.variables['head'] = 'http://example.com/definitions/head_process.rb'
11 engine.variables['tail'] = 'http://example.com/definitions/tail_process.rb'
12  
13 Ruote.process_definition :name => 'main process' do
14   sequence do
15     head
16     tail
17   end
18 end
19  
20 # or simply
21  
22 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在發生錯誤和終止的時候觸發的事件或者參與者,以下定義:     

 1 # you can pass a participant name
 2 engine.on_error = 'administrator'
 3  
 4 # or a subprocess name
 5 engine.on_error = 'error_procedure'
 6  
 7 # or directly a subprocess definition
 8 engine.on_error = Ruote.define do
 9   concurrence do
10     administrator :msg => 'something went wrong'
11     supervisor :msg => 'something went wrong'
12   end
13 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熟悉的朋友共同窗習。

相關文章
相關標籤/搜索