003. kogito在spring cloud微服务项目上的应用
1. 引子项目,就是新技术的实验田,在这互联网的时代,有新技术不用一下多可惜啊,所以新的项目,我就想用一用这个所谓的云原生的工作流引擎了。2. 项目背景与目标现在的项目是基于spring cloud搭建的微服务体系,比如这次示例需要用到的字典服务。所以今天的主要目标是:创建一个自定义的kogito项目添加spring cloud依赖添加服务发现,通过consul找到已经注册在上面的字典服务使用fe
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的依赖有冲突,其他都融合的很顺利。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)