流程插件开发
本文将会详细介绍如何使用 Java SDK
开发流程插件. 示例项目目上传至 https://github.com/air-iot/sdk-java-examples/tree/master/flow-plugin-example.
介绍
流程插件
是扩展 流程引擎
中的节点的一种方式. 在流程引擎现有的功能不满足需求时, 可以通过开发流程插件来实现自定义的功能.
开发步骤
1. 创建项目
该过程同 数据接入驱动开发-创建项目 中的创建项目过程一致.
2. 引入SDK
以 maven
为例, 在 pom.xml
中引入 sdk-flow-plugin-starter
依赖.
<dependencies>
<dependency>
<groupId>io.github.air-iot</groupId>
<artifactId>sdk-flow-plugin-starter</artifactId>
<version>4.x.x</version>
</dependency>
</dependencies>
3. 实现流程插件接口
SDK
中定义了 流程插件接口
, 该接口是平台与插件交互的桥梁. 开发者需要实现这个接口, 并且将实现类注入到 spring
容器中.
接口定义及详细说明见 流程插件接口说明.
流程插件启动时, SDK
会连接平台的 流程引擎
服务, 并接收流程引擎发送的请求.
当流程执行到该插件对应的节点时, 会发送请求给该插件对应的程序. SDK
接收到请求后会调用对应的插件实现, 并将插件处理结果返回给流程引擎.
一个程序中可以包含多个流程插件. 但是每个流程插件的名称必须唯一.
4. 配置插件
插件配置主要是插件与平台的连接配置.
flow-engine:
host: 192.168.11.101 # 流程引擎服务地址
port: 2333 # 流程引擎服务端口
connect-timeout: 15s # 连接超时
retry-interval: 30s # 重连间隔
heartbeat-interval: 30s # 心跳间隔
windows系统打包发布时的插件配置
flow-engine:
host: 127.0.0.1 # 流程引擎服务地址
port: 2333 # 流程引擎服务端口
linux系统打包发布时的插件配置
flow-engine:
host: flow-engine # 流程引擎服务地址
port: 2333 # 流程引擎服务端口
connect-timeout
、retry-interval
和 heartbeat-interval
通常情况下不需要修改.
5. 打包
流程插件打包就是将开发完成的程序打包为可以在平台部署的服务. 打包方式与 数据接入驱动开发-打包 中的打包方式基本一致, 但 service.yml
文件的内容稍有不同.
windows系统插件配置文件
# 必填项. 服务名称
Name: myPlugin
# 必填项. 例如: 1.0.0
Version: 1.0.0
# 非必填项.
Description: 插件描述信息
# 插件的配置文件名称, 平台在安装插件服务时会查找打包文件中查找该文件. 一般固定填写 application.yml
ConfigType: application.yml
# 必填项. 固定为 server
GroupName: server
# 必填项. 启动命令. 还可以添加一些启动参数, 例如: -Xms512m -Xmx1024m
Command: java -jar myPlugin.jar
linux系统插件配置文件
# 必填项. 服务名称
Name: myPlugin
# 必填项. 例如: 1.0.0
Version: 1.0.0
# 非必填项.
Description: 插件描述信息
# 必填项. 固定为 server
GroupName: server
# 固定为 None
Service: None
6. 部署
流程插件
的部署方式与 数据接入驱动
不同, 每个流程插件都是一个独立的服务, 在整个平台中只有一个实例. 部署过程如下:
- 登录
运维管理系统
, 运维管理系统的默认登录地址为http://IP:13030/
, 将IP
换成平台地址即可. - 点击左侧菜单栏中的
服务管理
选项, 进入服务管理页面. - 点击页面右上角的
添加服务
按钮, 然后选择离线添加
. - 点击
上传
按扭, 选择刚刚打包好的流程插件压缩包, 然后点击提交
按钮.
如果 流程插件
部署失败, 可以在 运维管理系统
的首页中查看日志.
流程插件接口说明
/**
* 流程插件接口
*/
public interface FlowPlugin<Request> {
/**
* 获取插件名称
* <br>
* 插件名称在整个平台中必须唯一, 流程引擎根据插件名称来区分不同的插件.
*
* @return 插件名称
*/
String getName();
/**
* 插件类型
*
* @return 插件类型
*/
FlowPluginType getPluginType();
/**
* 与流程引擎连接状态发生变化时触发
* <br>
* 注: 该方法在每次连接状态发生变化时都会被调用
*
* @param connected 当前与流程引擎的连接状态. {@code true} 连接已建立, {@code false} 连接已断开
*/
default void onConnectionStateChange(boolean connected) {
}
/**
* 当流程插件服务启动时执行的操作
* <br>
* 可以在此方法中执行一些初始化操作, 如建立连接, 初始化对象等.
* <br>
* 注: 该方法只会调用一次, 并且在 {@link #onConnectionStateChange(boolean)} 之前执行
*/
default void onStart() {
}
/**
* 当流程插件服务停止时执行的操作
* <br>
* 可以在此方法中执行一些清理操作, 如关闭连接等.
* <br>
* 注: 该方法只会调用一次.
*/
default void onStop() {
}
/**
* 执行流程引擎的请求并返回处理结果.
* <br>
* 如果抛出异常则视为请求执行失败. 否则视为请求执行成功.
*
* @param task 任务信息
* @return 请求处理结果.
* @throws FlowPluginException 如果请求执行失败
*/
FlowTaskResult execute(FlowTask<Request> task) throws FlowPluginException;
}