003. kogito在spring cloud微服務項目上的應用

1. 引子

項目,就是新技術的實驗田,在這互聯網的時代,有新技術不用一下多可惜啊,所以新的項目,我就想用一用這個所謂的雲原生的工作流引擎了。

2. 項目背景與目標

現在的項目是基於spring cloud搭建的微服務體系,比如這次示例需要用到的字典服務。所以今天的主要目標是:

  1. 創建一個自定義的kogito項目
  2. 添加spring cloud依賴
  3. 添加服務發現,通過consul找到已經註冊在上面的字典服務
  4. 使用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 依賴問題
  1. 添加服務註冊與發現,基於consul
  2. 添加open feign rpc框架
  3. 解決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是返回值,表示流程是否正確運行。

在這裏插入圖片描述

  • 流程定義
    1. 接收數據,並保存到數據庫
    2. 返回成功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的依賴有衝突,其他都融合的很順利。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章