Skip to main content

流程插件开发

本文将会详细介绍如何使用 Java SDK 开发流程插件. 示例项目目上传至 https://github.com/air-iot/sdk-java-examples/tree/master/flow-plugin-example.

介绍

流程插件 是扩展 流程引擎 中的节点的一种方式. 在流程引擎现有的功能不满足需求时, 可以通过开发流程插件来实现自定义的功能.

info

流程插件 只是扩展流程功能的方式之一. 除了 流程插件 扩展方式之外, 还可以开发一个独立的服务或与现有的服务集成. 例如: 在 数据接口 中添加被调用的目标服务, 然后在流程中使用 数据接口 节点调用该接口, 也可以实现对流程的扩展. 详细信息参考 HTTP数据接口数据库接口

开发步骤

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 接收到请求后会调用对应的插件实现, 并将插件处理结果返回给流程引擎.

info

一个程序中可以包含多个流程插件. 但是每个流程插件的名称必须唯一.

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 # 流程引擎服务端口
info

connect-timeoutretry-intervalheartbeat-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. 部署

流程插件 的部署方式与 数据接入驱动 不同, 每个流程插件都是一个独立的服务, 在整个平台中只有一个实例. 部署过程如下:

  1. 登录 运维管理系统, 运维管理系统的默认登录地址为 http://IP:13030/, 将 IP 换成平台地址即可.
  2. 点击左侧菜单栏中的 服务管理 选项, 进入服务管理页面.
  3. 点击页面右上角的 添加服务 按钮, 然后选择 离线添加.
  4. 点击 上传 按扭, 选择刚刚打包好的流程插件压缩包, 然后点击 提交 按钮.

流程插件部署

info

如果 流程插件 部署失败, 可以在 运维管理系统 的首页中查看日志.

流程插件接口说明

/**
* 流程插件接口
*/
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;
}