1. 程式人生 > >Activiti工作流引擎多租戶方案

Activiti工作流引擎多租戶方案

Activiti租戶也就是TENANT_ID_(tenantId)。該值主要用於記錄啟動的流程例項歸屬於哪個系統,比如a,b,c三個系統都有一個請假流程並且資料儲存在同一個資料庫,這個時候就應該考慮如何區分這三個流程了。

本文會詳細講解新的組合架構功能,灑上一些真實工作程式碼示例 !

1.1  多租戶共享資料庫

Activiti5.15版本中增加了多租戶的概念,該功能主要用於資料共享在一個數據庫的使用場景。一個或者多個的引擎但是他們使用的資料庫為同一個。因此操作的時候需要區分這些資料(部署的流程資源)的來源,以方便程式後續的處理。因為只需要將tenantId理解為一個標記即可,其本身也沒有更多的含義,僅僅是標記而已。

比如下圖中的例子兩個相同的流程定義key但是系統的來源不同。這個時候引擎會使用tenantId欄位來確保資料不會混亂 。

 

上面的例子優點:部署的時候比較方便,只需要在啟動流程例項的同時設定tenantId值即可。

缺點:就是在隨後的操作中需要時刻牢記住tenantId。如果不傳遞該值或者傳遞錯誤了,那麼風險就很大了。而且所有引擎共享一個數據庫也可能會造成庫中的資料激增以及龐大。這樣當資料庫達到一定的規模的時候,查詢起來也確實有點吃力。

既然上述的方法有點瑕疵或者我們不想使用共享方式操作資料庫,換言之每一個引擎使用自身的資料庫,這樣每一個引擎之間的資料是完全隔離的,相互之間不需要知道。如下圖所示

在這樣的需求中,每一個租戶可以有不同的資源配置或者他們之間相互不需要知道自己的存在。這樣每個引擎的效能會大大的提升。這樣設計的好處是:引擎之間是相互隔離的。缺點就是:配置更復雜、每一個引擎例項都會佔用一定的記憶體或者資源,並且你根本不用關係當前租戶所使用的上下文以及路由元件。

1.2 多引擎多租戶

開發人員使用的時候,往往希望更少的配置達到更好的效果,因此Activiti提供了多引擎多租戶的功能,一個引擎例項支撐整個(或者多喝)資料庫的操作。那麼引擎是如何處理的呢?一個引擎操作多個數據庫:第一需要有路由規則,比如a租戶的存在在a庫,b租戶的資料儲存在b庫等等。

通過上圖可以知道:通過一個引擎來管理和配置API能完全的達到效果,但不同的地方是資料之間是相互隔離的(類似多租戶多引擎,但其實只有一個引擎來工作)。這樣開發人員只需要配置和管理不同的資料庫即可。引擎會自動根據tenantId查詢到其對應的資源。

建立流程引擎非常的簡單如下所示:

config = new MultiSchemaMultiTenantProcessEngineConfiguration(tenantInfoHolder);
config.setDatabaseType(MultiSchemaMultiTenantProcessEngineConfiguration.DATABASE_TYPE_H2);
config.setDatabaseSchemaUpdate(MultiSchemaMultiTenantProcessEngineConfiguration.DB_SCHEMA_UPDATE_DROP_CREATE);
config.registerTenant("alfresco", createDataSource("jdbc:h2:mem:activiti-mt-alfresco;DB_CLOSE_DELAY=1000", "sa", ""));
config.registerTenant("acme", createDataSource("jdbc:h2:mem:activiti-mt-acme;DB_CLOSE_DELAY=1000", "sa", ""));
config.registerTenant("starkindustries", createDataSource("jdbc:h2:mem:activiti-mt-stark;DB_CLOSE_DELAY=1000", "sa", ""));
processEngine = config.buildProcessEngine();

上述程式碼看起來與常規的引擎建立過程非常的類似。最顯著的區別就是我們使用引擎註冊租戶。每一個租戶需要一個租戶的唯一標識值以及資料來源的配置。既然存在資料來源當然需要對其進行配置了。這就意味著我們可以按照自己的實際情況配置一些資料池子。

路由規則需要配置哪些標識連線到哪些資料庫,從TenantInfoHolder例項獲取即可。

TenantInfoHolder是一個介面,這個需要自己實現,具體的使用取決於自己入戶管理使用者以及租戶 。

 下面演示DummyTenantInfoHolder的使用:

private void setupTenantInfoHolder() {
   DummyTenantInfoHolder tenantInfoHolder = new DummyTenantInfoHolder();
   tenantInfoHolder.addTenant("alfresco");
   tenantInfoHolder.addUser("alfresco", "joram");
   tenantInfoHolder.addUser("alfresco", "tijs");
   tenantInfoHolder.addUser("alfresco", "paul");
   tenantInfoHolder.addUser("alfresco", "yvo");
   tenantInfoHolder.addTenant("acme");
   tenantInfoHolder.addUser("acme", "raphael");
   tenantInfoHolder.addUser("acme", "john");
   tenantInfoHolder.addTenant("starkindustries");
   tenantInfoHolder.addUser("starkindustries", "tony");
   this.tenantInfoHolder = tenantInfoHolder;
 }

我們現在需要啟動一些流程例項(任意一個流程即可)。同時需要做的就是切換當前的租戶標識,進而觀察資料庫資料的變化。

當然了我們也可以動態的註冊和移除租戶。如下所示:

config.registerTenant("dailyplanet", createDataSource("jdbc:h2:mem:activiti-mt-daily;DB_CLOSE_DELAY=1000", "sa", ""));

由於上述涉及到的程式碼比較多,可以進qq群129123599進行下載上述的demo進行演示。

1.3 使用建議

對於多引擎多租戶的使用需要認真考慮,其路由規則決定了資料將會儲存在那個資料庫,如果路由規則書寫的不好,容易造成資料轉發到一個庫,就會造成某一個數據庫的資料特別多,而其他的資料庫沒有資料或者資料少,造成資料傾斜

相關推薦

Activiti工作引擎租戶方案

Activiti租戶也就是TENANT_ID_(tenantId)。該值主要用於記錄啟動的流程例項歸屬於哪個系統,比如a,b,c三個系統都有一個請假流程並且資料儲存在同一個資料庫,這個時候就應該考慮如何區分這三個流程了。 本文會詳細講解新的組合架構功能,灑上一些真實工作程式

activiti工作引擎版本方案

activiti流程多版本共存問題 過去使用jbpm4,有一個非常大的問題: 就是當流程發生變化需要部署新版本的時候,由於舊版本有例項在執行中,不能直接覆蓋舊版本的流程,必需新舊(兩個甚至多個版本)共存。而jbpm4本身沒有處理多版本共存過渡到機制,而需要通過自行封裝新

Activiti工作引擎數據庫表結構

activit let repr 通過 運行時 工作流 用例 pro ext Activiti工作流引擎數據庫表結構 一、數據庫表的命名   Acitiviti數據庫中表的命名都是以ACT_開頭的。第二部分是一個兩個字符用例表的標識。此用例大體與服務API是匹配的。 l

Java Activiti 工作引擎 springmvc SSM 流程審批 後臺框架源碼

Activiti6.0工作流模塊----------------------------------------------------------------------------------------------------------1.模型管理 :web在線流程設計器、預覽流程xml、導出x

Java Activiti 工作引擎 流程審批 後臺框架源碼 springmvc SSM

物流查詢接口 主表 快速 font sql www. 物流 sock hit 博文來源:http://www.fhadmin.org/webnewsdetail1.html工作流模塊----------------------------------------------

Activiti工作引擎學習總結

經過這三天對與Activiti的軟磨硬泡,也算是小有所獲。 想要學會工作流引擎其實很簡單,搞清楚processengine (Activiti引擎),並且理解其中幾大服務介面: 服務:    reposit

Activiti工作引擎學習及流程設計器的安裝(Eclipse外掛)

工作流簡介     我們先來描述一個在工作中經常用到的一個流程:請假     員工張三請假一天 主管王五批准     員工李四請假一天 主管王五不批准  &nbs

ActivitiActiviti工作引擎 - 提交審批和審批處理示例詳解 【精品】

       在上一篇的文章中,我給大家分享了Activiti工作流引擎的API的封裝程式碼,通過我們自己封裝的程式碼,在實際的專案中我們就可以進行工作流相關的開發了。以下內容我們分三個部分:提交審批,審批列表查詢,審批處理。 一、提交審批 &nb

Activiti教程(二)activiti工作引擎結構講解

快速掌握activiti: 1.下載activiti看下結構  2.部署下activiti-admin 控制檯 3.瞭解流程定義-部署-執行 4.學著使用控制檯 5.開始編碼 一.工作流引擎結構 二.初始化表結構  28張表 比以前的版本多幾張

Activiti工作引擎web設計不顯示問題總結

首先開啟官網地址:http://mvnrepository.com/artifact/org.activiti/activiti-webapp-explorer2下載最新的war包,然後解壓後,放到tomcat的webapp下。1、首先要將應用名稱改為activiti-exp

Activiti工作引擎添新丁:Flowable6.0(聽說無縫連線你會換嗎?)

如果你在還糾結該選擇JPMB還是Acitiviti的時候,或者還在糾結於是否該從JPMB遷移到Activiti的陣營中的時候,很不幸地告訴你,Flowable6.0已經發布了。   是不是變得更糾結啦?!又多了一種選擇。   1、 什麼是Flowable?   

Activiti工作引擎的官方例項配置詳細步驟

概述 學習Activiti工作流引擎,第一步自然是是下載官方提供的Demo原始碼來參考。 Activiti官網:activiti-5.22.0.zip 下載下來的原始碼結構為: war包裡就是官方示例 建立Java web專案

Activiti工作引擎——元件說明

工作流引擎簡介 工作流引擎被廣泛應用於各種資訊化系統中,將原本散亂的業務梳理後定製成業務規範流程,進而約束業務的規範化處理和運轉,定製流程規範後,將其部署到工作流引擎中,由他自動驅動業務流程的進行。 Activiti可以執行在任何型別的java程式

Activiti 工作引擎系列--01 初探

這段時間簡單摸了一下Activiti 工作流引擎,把整理出來的slides在這裡稍作記錄。歡迎討論! 什麼是工作流? 我們生活中工作流很常見了,比如銀行取款,比如工作報銷。背後都有一套既定的流程在那裡。舉個例子: BPMN 2.0 需要去設計一套基於工作流的系統,就

activiti工作引擎自動部署autodeploy心得

終於要做表單了,就用activiti內建的表單引擎juel吧,因為他遵循java EL新的規範,還支援引數傳遞,加上JQ的功能應該足夠用了。       我用的自定義的部署工具,當然也是移植過來的,看看配置程式碼如下: Xml程式碼   <!-- sxh自定義配置引數,web服務重啟時

Activiti工作引擎的使用

對於工作流引擎的解釋請參考百度百科:工作流引擎 1.1 我與工作流引擎 在第一家公司工作的時候主要任務就是開發OA系統,當然基本都是有工作流的支援,不過當時使用的工作流引擎是公司一些牛人開發的(據說是用一個開源的引擎修改的),名稱叫CoreFlow;功能相對Activiti來說比較弱,但是能滿足日常的

Activiti工作引擎資料庫表結構

466355109,可以相互交流 資料庫表的命名 Acitiviti資料庫中表的命名都是以ACT_開頭的。第二部分是一個兩個字元用例表的標識。此用例大體與服務API是匹配的。 l  ACT_RE

馳騁工作引擎JFlow與activiti的對比之4種包含例項的模式

無同步的多例項(MIwithout) 在流程中,一個活動可以啟用多個例項,每個例項相互獨立,並不需要在後面進行同步。 例子:比如使用者購買了N本書,於是後續的支付賬單、更新客戶可以以本書為單位各自執行。 ACTIVITI 中的支援情況: 支援這種模式,但是不允許在後面進行結束動

工作引擎Activiti使用自我總結

轉載自:工作流引擎Activiti使用總結 1.簡單介工作流引擎與Activiti 對於工作流引擎的解釋請參考百度百科:工作流引擎 1.1 我與工作流引擎 在第一家公司工作的時候主要任務就是開發OA系統,當然基本都是有工作流的支援,不過當時使用的工作流引擎是公司一些牛人開發的(據

工作引擎JFlow與activiti 對比分析(一)5種基本控制模式的對比

為了更好的說明activiti 與jflow的兩款工作流引擎的特點與區別,我們按照如下幾個方面做一次全面的、客觀的對比。       首先activiti是國外的一款開源的工作流程引擎,在國際上影響比較深遠與廣泛,解決了BPM領域的很多問題,值得我們讚賞。他