在CockroachDB上运行Flowable
什么是CockroachDB?
CockroachDB是一個(gè)我一直關(guān)注很長(zhǎng)一段時(shí)間的項(xiàng)目。 這是一個(gè)開(kāi)放源代碼的Apache 2許可數(shù)據(jù)庫(kù)( Github鏈接 ), 極大地從Google Spanner白皮書(shū)中汲取了靈感 。 它的核心是可水平擴(kuò)展的鍵值存儲(chǔ)。 但是,對(duì)我們而言真正有趣的是:1)它通過(guò)使用Postgres有線協(xié)議支持SQL; 2)具有完整的ACID語(yǔ)義和分布式事務(wù)。 如果您對(duì)他們?nèi)绾螌?shí)現(xiàn)這一目標(biāo)感興趣,請(qǐng)確保閱讀CockroachLabs博客上的技術(shù)文章(我承認(rèn),有時(shí)這并不適合膽怯的人;-)。 請(qǐng)注意,它仍然是分布式系統(tǒng),因此遵循CAP定理,更具體地說(shuō),它是CP系統(tǒng)。
正如您將在其常見(jiàn)問(wèn)題解答中所讀到的那樣,這還處于初期階段,因?yàn)樵S多事情尚未進(jìn)行優(yōu)化。 但是,既然他們最近增加了對(duì)join的基本支持 ,我想我應(yīng)該使用Flowable引擎來(lái)嘗試一下。 在本文中,我將展示在CockroachDB上運(yùn)行Flowable v6流程引擎有多么容易。
(旁注:我喜歡這個(gè)名字!對(duì)于不了解它的人:蟑螂是地球上能夠幸存于核爆炸等生物中的少數(shù)生物之一。相當(dāng)有彈性的小動(dòng)物……您也希望將其用于數(shù)據(jù)收集��)
設(shè)定
CockroachDb網(wǎng)站上的入門(mén)文檔非常清楚,但為清楚起見(jiàn),這是我遵循的步驟:
- 下載最新的CockroachDB tarball(或您的系統(tǒng)需要的任何文件)
- 解壓并啟動(dòng)第一個(gè)節(jié)點(diǎn):
- ./cockroachdb開(kāi)始
- 啟動(dòng)第二個(gè)節(jié)點(diǎn):
- ./cockroach start –store = node2 –port = 26258 –http-port = 8081 –join = localhost:26257
- 啟動(dòng)第三個(gè)節(jié)點(diǎn):
- ./cockroach start –store = node3 –port = 26259 –http-port = 8082 –join = localhost:26257
歡呼,您現(xiàn)在有一個(gè)運(yùn)行著三個(gè)節(jié)點(diǎn)的集群,它們將很高興地在彼此之間復(fù)制數(shù)據(jù)。 有一個(gè)不錯(cuò)的管理應(yīng)用程序,可在8080上運(yùn)行,并概述了群集:
下一步:我們需要Flowable引擎的數(shù)據(jù)庫(kù)。 通過(guò)CockroachDB SQL shell創(chuàng)建數(shù)據(jù)庫(kù)并向默認(rèn)用戶(maxroach)授予權(quán)限:
./cockroachdb sql > CREATE DATABASE flowable; > GRANT ALL ON DATABASE flowable TO maxroach;遺憾的是,CockroachDB尚未實(shí)現(xiàn)JDBC元數(shù)據(jù)功能,我們?cè)贔lowable引擎中使用了該功能來(lái)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)模式。 另外,在某些情況下我無(wú)法完全使外鍵正常工作,因此我復(fù)制/粘貼了Flowable SQL腳本并刪除了這些腳本。 該文件已上傳到Github上 。
同樣,這意味著當(dāng)前您需要“手動(dòng)”創(chuàng)建數(shù)據(jù)庫(kù)模式。 如果您使用的是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上可流動(dòng)
現(xiàn)在數(shù)據(jù)庫(kù)已準(zhǔn)備就緒。 是時(shí)候使用此數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ)來(lái)啟動(dòng)Flowable引擎。 所有源代碼都可以在Github上獲得: https : //github.com/jbarrez/flowable-cockroachdb-demo
由于CockroachDB使用Postgres有線協(xié)議,我們只需要將Postgres JDBC驅(qū)動(dòng)程序添加到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>我在這里使用當(dāng)前的v6 master分支,尚未發(fā)布。 通過(guò)克隆flowable-engine項(xiàng)目并在根目錄中執(zhí)行“ mvn clean install -DskipTests”,您可以輕松地自己構(gòu)建它。 用于引擎的配置文件非常簡(jiǎn)單,看起來(lái)就像連接到常規(guī)Postgres關(guān)系數(shù)據(jù)庫(kù)一樣。 請(qǐng)注意,我有點(diǎn)“欺騙” databaseSchemaUpdate設(shè)置以避免自動(dòng)模式檢查。
<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" />我們將使用的流程定義是一個(gè)簡(jiǎn)單的演示流程,它行使一些任務(wù),例如用戶任務(wù),服務(wù)任務(wù),子流程,計(jì)時(shí)器等:
以下代碼段顯示了如何以幾種不同方式使用Flowable API。 如果您遵循CockroachDB管理員UI,則會(huì)看到流量增加了一段時(shí)間。 這里發(fā)生的是:
- 第3-9行:從上方使用配置文件啟動(dòng)Flowable流程引擎,并獲取所有服務(wù)
- 第11行:部署流程定義
- 第15-19行:啟動(dòng)100個(gè)流程實(shí)例
- 第24-33行:完成系統(tǒng)中的所有任務(wù)
- 第35行:進(jìn)行歷史查詢
因此,正如您所看到的,簡(jiǎn)單地觸摸各種API并對(duì)其進(jìn)行驗(yàn)證就可以了,這在CockroachDB上是沒(méi)有用的。
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(); }輸出完全符合您的期望(并且與在關(guān)系數(shù)據(jù)庫(kù)上運(yùn)行的輸出完全相同)。
Process definitions deployed = 1 Process instances running = 100 Completed 10 tasks Completed 20 tasks … Completed 400?tasks Finished all tasks. Finished process instances = 100結(jié)論
在CockroachDB上運(yùn)行Flowable流程引擎幾乎是微不足道的,特別是通過(guò)出色的SQL層和CockroachDB開(kāi)發(fā)人員添加的關(guān)系支持。 還有一段路要走(正如您將在他們的博客上閱讀的那樣),但是現(xiàn)在肯定已經(jīng)是一項(xiàng)很酷的技術(shù)了! 誰(shuí)又不喜歡不犧牲ACID交易的水平可擴(kuò)展性呢? 它非常適合流程引擎的用例。
我將繼續(xù)密切關(guān)注CockroachDB項(xiàng)目,因?yàn)榕cFlowable的結(jié)合顯示出很大的潛力。 而且,正如您所知,一旦他們開(kāi)始關(guān)注性能,我也非常期待能夠運(yùn)行一些基準(zhǔn)測(cè)試:-)。
翻譯自: https://www.javacodegeeks.com/2016/11/running-flowable-cockroachdb.html
總結(jié)
以上是生活随笔為你收集整理的在CockroachDB上运行Flowable的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 午餐前如何安装OpenStack Clo
- 下一篇: Drools 6.5.0.Final提供