本地运行flowable_在CockroachDB上运行Flowable
本地運行flowable
什么是CockroachDB?
CockroachDB是一個我一直關注了很長時間的項目。 這是一個開放源代碼的Apache 2許可數據庫( Github鏈接 ),該數據庫在很大程度上汲取了Google Spanner白皮書的啟發 。 它的核心是可水平擴展的鍵值存儲。 但是,對我們而言真正有趣的是:1)它通過使用Postgres有線協議支持SQL; 2)具有完整的ACID語義和分布式事務。 如果您對他們如何實現這一目標感興趣,請確保閱讀CockroachLabs博客上的技術文章(我承認,有時這并不適合膽怯的人;-)。 請注意,它仍然是分布式系統,因此遵循CAP定理,更具體地說,它是CP系統。
正如您將在其常見問題解答中所讀到的那樣,這還處于初期,因為許多功能尚未優化。 但是,既然他們最近增加了對join的基本支持 ,我認為我應該使用Flowable引擎對其進行調整。 在本文中,我將展示在CockroachDB上運行Flowable v6流程引擎有多么容易。
(旁注:我喜歡這個名字!對于不了解它的人:蟑螂是地球上能夠幸存于像核爆炸這樣的生物中的少數生物之一。相當有彈性的小動物……您也想為您的數據做些什么��)
建立
CockroachDb網站上的入門文檔非常清楚,但是為了清楚起見,這是我遵循的步驟:
- 下載最新的CockroachDB tarball(或您的系統需要的任何文件)
- 解壓并啟動第一個節點:
- ./cockroachdb開始
- 啟動第二個節點:
- ./cockroach start –store = node2 –port = 26258 –http-port = 8081 –join = localhost:26257
- 啟動第三個節點:
- ./cockroach start –store = node3 –port = 26259 –http-port = 8082 –join = localhost:26257
歡呼,您現在有一個運行著三個節點的集群,它們將很高興地在彼此之間復制數據。 有一個很好的管理應用程序,可在8080上運行,并概述了群集:
下一步:我們需要Flowable引擎的數據庫。 通過CockroachDB SQL shell創建數據庫并向默認用戶(maxroach)授予權限:
./cockroachdb sql > CREATE DATABASE flowable; > GRANT ALL ON DATABASE flowable TO maxroach;遺憾的是,CockroachDB尚未實現JDBC元數據功能,我們在Flowable引擎中使用了該功能來自動創建數據庫模式。 另外,在某些情況下我無法完全使外鍵正常工作,因此我復制/粘貼了Flowable SQL腳本并刪除了這些腳本。 該文件已上傳到Github上 。
同樣,這意味著當前您需要“手動”創建數據庫模式。 如果您使用的是bash終端,則可以從github下載上面的腳本,并按如下所示將其提供給CockroachDB SQL Shell。 或者,您可以將其粘貼到SQL Shell中。
sql=$(wget https://raw.githubusercontent.com/jbarrez/flowable-cockroachdb-demo/master/engine-schema.sql -q -O -) ./cockroach sql –database=flowable –user=maxroach -e “$sql”在CockroachDB上可流動
現在數據庫已準備就緒。 是時候使用此數據庫作為數據存儲來啟動Flowable引擎。 所有源代碼都可以在Github上獲得: https : //github.com/jbarrez/flowable-cockroachdb-demo
由于CockroachDB使用Postgres有線協議,我們只需要將Postgres JDBC驅動程序添加到pom.xml中 :
<dependency><groupId>org.flowable</groupId><artifactId>flowable-engine</artifactId><version>6.0.0.RC1-SNAPSHOT</version> </dependency> <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>9.4.1211.jre7</version> </dependency>我在這里使用當前的v6 master分支,尚未發布。 通過克隆flowable-engine項目并在根目錄中執行“ mvn clean install -DskipTests”,您可以輕松地自己構建它。 該引擎使用的配置文件非常簡單,看起來就像連接到常規Postgres關系數據庫一樣。 請注意,我有點“欺騙” databaseSchemaUpdate設置以避免自動模式檢查。
<property name="jdbcUrl" value="jdbc:postgresql://127.0.0.1:26257/flowable?sslmode=disable" /> <property name="jdbcDriver" value="org.postgresql.Driver" /> <property name="jdbcUsername" value="maxroach" /> <property name="jdbcPassword" value="" /><property name="databaseSchemaUpdate" value="cockroachDb" />我們將使用的流程定義是一個簡單的演示流程,它行使一些任務,例如用戶任務,服務任務,子流程,計時器等:
以下代碼片段顯示了如何以幾種不同的方式使用Flowable API。 如果您遵循CockroachDB管理員UI,則會看到流量增加了一段時間。 這里發生的是:
- 第3-9行:從上方使用配置文件啟動Flowable流程引擎,并獲取所有服務
- 第11行:部署流程定義
- 第15-19行:啟動100個流程實例
- 第24-33行:完成系統中的所有任務
- 第35行:進行歷史查詢
因此,如您所見,花哨的東西只是簡單地接觸各種API并對其進行驗證就可以在CockroachDB上運行。
public static void main(String[] args) {ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("flowable.cfg.xml").buildProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();RuntimeService runtimeService = processEngine.getRuntimeService();TaskService taskService = processEngine.getTaskService();HistoryService historyService = processEngine.getHistoryService();repositoryService.createDeployment().addClasspathResource("demo-process.bpmn").deploy();System.out.println("Process definitions deployed = " + repositoryService.createProcessDefinitionQuery().count());Random random = new Random();for (int i=0; i<100; i++) {Map<String, Object> vars = new HashMap<>();vars.put("var", random.nextInt(100));runtimeService.startProcessInstanceByKey("myProcess", vars);}System.out.println("Process instances running = " + runtimeService.createProcessInstanceQuery().count());LinkedList<Task> tasks = new LinkedList<>(taskService.createTaskQuery().list());while (!tasks.isEmpty()) {Task task = taskService.createTaskQuery().taskId(tasks.pop().getId()).singleResult();if (task != null) {taskService.complete(task.getId());}if (tasks.isEmpty()) {tasks.addAll(taskService.createTaskQuery().list());}}System.out.println("Finished all tasks. Finished process instances = "+ historyService.createHistoricProcessInstanceQuery().finished().count());processEngine.close(); }輸出與您期望的完全相同(并且與在關系數據庫上運行的輸出完全相同)。
Process definitions deployed = 1 Process instances running = 100 Completed 10 tasks Completed 20 tasks … Completed 400?tasks Finished all tasks. Finished process instances = 100結論
在CockroachDB上運行Flowable流程引擎幾乎是微不足道的,特別是通過出色SQL層和CockroachDB開發人員添加的關系支持。 還有一段路要走(正如您將在他們的博客上閱讀的那樣),但是現在肯定已經是一項很酷的技術了! 誰又不喜歡不犧牲ACID交易的水平可擴展性呢? 它非常適合流程引擎的用例。
我將繼續密切關注CockroachDB項目,因為與Flowable的結合顯示出很大的潛力。 而且,正如您所了解的那樣,一旦他們開始關注性能,我也非常期待能夠運行一些基準測試:-)。
翻譯自: https://www.javacodegeeks.com/2016/11/running-flowable-cockroachdb.html
本地運行flowable
總結
以上是生活随笔為你收集整理的本地运行flowable_在CockroachDB上运行Flowable的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring boot缓存_Spring
- 下一篇: 物体的浮沉条件 物体的浮沉条件简述