您好,登錄后才能下訂單哦!
由于最近自己寫點小東西,需要有工作流程管理方面的應(yīng)用,所有的環(huán)境為Ruby on rails,所有在選擇流程引擎的時候選擇了ruote,但是對于ruote是完全陌生的,所以在這里記下點滴,如果理解的不正確,還請大家批評指正。
Ruote:用Ruby寫的一個工作流引擎。
開始了解Ruote先要了解幾個很重要的概念:
下面是一個Ruote的配置:
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包裝在一起。
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)))
也可以向下面這樣定義:
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的配置項:
participant_threads_enabled(自從ruote2.3.0版本開始,默認情況是true)
默認情況下, 從work中調(diào)度一個流程給參與者的時候都用一個新的Ruby線程。這樣在默認情況下不會阻塞worker。
remote_definition_allowed(默認情況下是false)
Remote definitions 是通過Http協(xié)議過程定義。因為過程定義是代碼,默認情況下用如下方法是不允許的:
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')
如果要使用如上的定義,那么應(yīng)該將‘remote_definition_allowed的選項設(shè)置為"true"。
ruby_eval_allowed:(默認是false)
wait_logger_max:(默認是147)
這個設(shè)置只是在開發(fā)測試環(huán)境中一個worker的情況,在其他環(huán)境下不用管這個配置。WaitLogger是ruote的一個組件,追蹤147個最近的本地工作流程的處理信息。 preserve_configuration:(默認是false)
當這個配置設(shè)置為true的時候,engine,worker,storage將不向存儲后面持續(xù)工作流程寫配置。適用于多個工作流程一起運行的情境下。
restless_worker:(默認是false)
更像是一個工作流程的配置,當設(shè)置為true的時候,工作流程在提取信息和定時調(diào)度執(zhí)行期間就不會sleep。
worker_state_enabled:(默認是false)
當設(shè)置為true的時候,將Ruote::Dashboard中的worker_state解鎖,可能的狀態(tài)包括running,paused,stopped.工作流讀取狀態(tài)執(zhí)行相應(yīng)的running,paused,stop操作。
engine on_error / on_terminate:
engine在發(fā)生錯誤和終止的時候觸發(fā)的事件或者參與者,如下定義:
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的配置。
工作流、業(yè)務(wù)處理被人調(diào)用,持續(xù)好長時間,數(shù)據(jù)的持久性是必須的,storage用來保存數(shù)據(jù)。因為所有的工作流程共享storage,所以不僅要提供可靠的持久數(shù)據(jù),而且可以避免工作流之間的沖突。
下面這個表中是實現(xiàn)的storage類型:
multiple workers:storage是否支持多個工作流程。
remote worker:現(xiàn)實工作流程是不是和storage在一個主機上
speed :顯示storage的速度排行。
一個字內(nèi)存中臨時的storage,不能夠在多個工作流程中共享,大多數(shù)用于測試或者臨時的工作流程。
以json的格式將ruote的信息保存成文件,可以在多個工作流程中共享數(shù)據(jù)。
基于redis的storage,很快,在多個工作流程的情況下使用。
通用的持久storage,使用Mysql或者PostgreSQL,在多個工作流程的情況下使用。
一個 DataMapper storage 實現(xiàn)。
一個基于 CouchDB 的Storage實現(xiàn)。
MongoDB storage 實現(xiàn)。
提供一種技術(shù),使FsStorage可以被遠程的工作流程可以使用。
十分想找對ruote熟悉的朋友共同學(xué)習。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。