1. 引子
項目,就是新技術的實驗田,在這互聯網的時代,有新技術不用一下多可惜啊,所以新的項目,我就想用一用這個所謂的雲原生的工作流引擎了。
2. 項目背景與目標
現在的項目是基於spring cloud搭建的微服務體系,比如這次示例需要用到的字典服務。所以今天的主要目標是:
- 創建一個自定義的kogito項目
- 添加spring cloud依賴
- 添加服務發現,通過consul找到已經註冊在上面的字典服務
- 使用feign進行RPC調用
3. 流程建模工具
JBoss出了一個桌面的流程建模工具,Business Modeler Hub Desktop-下載地址。
- 支持Win/Linux/MacOS
- 有VSCode的建查插件
- 有獨立的建模工具
4. 過程
在本文起稿的前幾天,kogito已經發布了1.0.0.Final版
4.1 創建項目
jboss有提供基於maven的項目模板,其實就是幫助指定的kogito的版本號,以及在pom.xml中配置好kogito的插件。
$ mvn archetype:generate \
-DarchetypeGroupId=org.kie.kogito \
-DarchetypeArtifactId=kogito-springboot-archetype \
-DgroupId=com.taotechip.floweng -DartifactId=floweng \
-DarchetypeVersion=1.0.0.Final \
-Dversion=0.1.0-SNAPSHOT
# ignored log output
Confirm properties configuration:
groupId: com.taotechip.floweng
artifactId: floweng
version: 0.1.0-SNAPSHOT
package: com.taotechip.floweng
Y: : # 看到這個Y: :記得點一下回車,不然要等到天荒地老了。
4.2 依賴問題
- 添加服務註冊與發現,基於consul
- 添加open feign rpc框架
- 解決restful標準版本依賴衝突
添加依賴
<!-- 基於consul的服務註冊與發現:START -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
<version>2.2.5.RELEASE</version>
<exclusions>
<exclusion>
<!-- 排除舊版本RESTFUL標準定義的依賴 -->
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 基於consul的服務註冊與發現:END -->
<!-- spring-cloud的遠程調用依賴:START -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- spring-cloud的遠程調用依賴:END -->
<!-- 新版本RESTFUL標準定義的依賴 -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
<scope>compile</scope>
</dependency>
4.3. 流程定義
- 流程ID:receiveData
- 流程數據:還有一個我沒太明白的地方,就是所有的出入參,都要在流程圖的process data這裏統一定義。
- 入參,plans,接收一個List
- 出參,code&info是返回值,表示流程是否正確運行。
- 流程定義
- 接收數據,並保存到數據庫
- 返回成功code/info
到目前爲止,我有點把流程引擎用偏了,我把流程引擎的process當成了一個restful接口,用流程來定義這個restful的處理過程。
4.4. 遠程調用
這是spring cloud的部分,只是原本需要自己在代碼中處理的調用流程,現在通過kogito去觸發。
@Component
public class ReceivePlanTask {
@Autowired
private FeignJobTitleService jobTitleService;
public Boolean process(List inputData) {
System.out.println(inputData);
jobTitleService.create(Dict.JobType.Doctor, "masterCode", "masterName");
return true;
}
}
5. 總結
這次試驗是學了幾天kogito之後的一次嘗試,特別是我現在的項目是spring cloud的微服務架構爲主,我很想知道kogito是否能跟我現在的架構整合起來。技術本身是沒什麼問題的,主要是兩個框架的兼容性是否好解決。
試驗證明,除了kogito的restful標準和spring-cloud中用於服務註冊與發現的consul-start的依賴有衝突,其他都融合的很順利。