Skip to main content
Version: 3.8.0

插件开发流程说明

TIS扩展点介绍

插件体系介绍

TIS是基于插件体系构建的,分为TIS-Core(https://github.com/datavane/tis) 与插件Plugins实现层(https://github.com/qlangtech/plugins) ,如下图:

如需要对TIS进行功能扩展,只需基于TIS提供的 进行扩展,而不需要对TIS-Core层的任何代码进行修改。 这符合开放封闭原则(Open-Closed Principle,OCP),即在TIS-Core不被修改的前提下被扩展新的功能。例如,需要在TIS中新添加一种新的数据类型,只需要新添加一个TPI插件包即可。

名词解释

  • 扩展点(Extend Point)

    抽象类继承于(Describable.java),开发者可理解成对于TIS内核层的 一个扩展点,用户可以按照自己需要进行扩展

  • 扩展实现:

    基于扩展点的具体实现

具体的扩展点扩展实现 请查看

开发者可以点击对应连接查看该扩展点或扩展实现的具体文档说明。

在使用TIS过程中用户已经发现,在每个功能页面中的头部位置也有扩展实现的标示,例如下图:

在每个功能页面模块的右上角有该模块的实现类标示,用户可以点击该连接,查看该插件的说明文档,还能通过链接查看该扩展实现的Github原代码。

TIS插件体系特点

TIS插件体系实现参照了CI/CD领域的Jenkins实现方式,和Jenkins一样TIS的产品功能流程是基于WBE-UI实现的,TIS内部已经实现了一套强大的前端UI自动化渲染机制。

后端开发工程师只需按照TIS开发规约,编写新的插件代码,不需要编写一行前端html或者js代码就能轻松构建一个新的插件,从而完成对TIS的功能扩展。

TIS的插件开发步骤

确定需要扩展的扩展点

通过 名词解释 一节中已经可以通过TIS现有的页面流程了解到,需要扩展的功能点的扩展点类的全路径。

创建插件脚手架工程

首先需要在 $MAVEN_HOME/conf/setting.xml 文件中添加 TIS的私有仓库Profile,配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
<profiles>
<profile>
<id>tis</id>
<repositories>
<repository>
<id>tis-releases</id>
<url>http://mvn-repo.oss-cn-hangzhou.aliyuncs.com/release/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>tis-releases</id>
<url>http://mvn-repo.oss-cn-hangzhou.aliyuncs.com/release/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>

然后执行以下命令创建插件骨架工程:

mvn com.qlangtech.tis:tis-archetype-generate-plugin:3.8.0:generate \
-Drat.skip=true \
-Dtis.version=3.8.0 \
-Dtis.extendpoint="com.qlangtech.tis.plugin.incr.TISSinkFactory:DB2SinkFactory;com.qlangtech.tis.async.message.client.consumer.impl.MQListenerFactory:FlinkCDCDB2SourceFactory" \
-Dtis.artifactId=tis-flink-db2-plugin \
-Ptis

以上Command中两个参数需要说明

  1. tis.extendpoint

    格式为: 扩展点:扩展实现类名称[;扩展点:扩展实现类名称]+

    扩展点 中的 1. 扩展点类 2. 扩展实现 3. 扩展实现类的继承链中的任一父类

    扩展实现类名称:新的扩展实现类名(符合Java类名命名规范即可)

  2. tis.artifactId

    新插件工程的名称,注意,该名称有命名规范,对于不同类型的插件包有不同的命名规范:

    插件包类型类型说明项目名称命名规范
    增量同步只包含增量同步的扩展实现需符合正则 tis-flink-([a-z,0-9,\-]+)-plugin
    批量同步只包含批量同步的扩展实现需符合正则 tis-datax-([a-z,0-9,\-]+)-plugin
    其他既不包含 增量同步
    也不包含 批量同步
    扩展实现
    需符合增则 tis-([a-z,0-9,\-]+)-plugin
    caution

    此外,增量同步批量同步 的扩展实现不能共存于一个 插件工程中

    脚手架工程目录文件列表一览

     .
    |____pom.xml
    |____src
    | |____test
    | | |____java
    | | | |____TestAll.java
    | | | |____com
    | | | | |____qlangtech
    | | | | | |____tis
    | | | | | | |____async
    | | | | | | | |____message
    | | | | | | | | |____client
    | | | | | | | | | |____consumer
    | | | | | | | | | | |____impl
    | | | | | | | | | | | |____extend
    | | | | | | | | | | | | |____TestFlinkCDCDB2SourceFactory.java
    | | | | | | |____plugin
    | | | | | | | |____incr
    | | | | | | | | |____extend
    | | | | | | | | | |____TestDB2SinkFactory.java
    | |____main
    | | |____resources
    | | | |____com
    | | | | |____qlangtech
    | | | | | |____tis
    | | | | | | |____async
    | | | | | | | |____message
    | | | | | | | | |____client
    | | | | | | | | | |____consumer
    | | | | | | | | | | |____impl
    | | | | | | | | | | | |____extend
    | | | | | | | | | | | | |____FlinkCDCDB2SourceFactory.md
    | | | | | | | | | | | | |____FlinkCDCDB2SourceFactory.json
    | | | | | | |____plugin
    | | | | | | | |____incr
    | | | | | | | | |____extend
    | | | | | | | | | |____DB2SinkFactory.md
    | | | | | | | | | |____DB2SinkFactory.json
    | | |____java
    | | | |____com
    | | | | |____qlangtech
    | | | | | |____tis
    | | | | | | |____async
    | | | | | | | |____message
    | | | | | | | | |____client
    | | | | | | | | | |____consumer
    | | | | | | | | | | |____impl
    | | | | | | | | | | | |____extend
    | | | | | | | | | | | | |____FlinkCDCDB2SourceFactory.java
    | | | | | | |____plugin
    | | | | | | | |____incr
    | | | | | | | | |____extend
    | | | | | | | | | |____DB2SinkFactory.java

    以上shell command 会在本地中创建一个名叫tis-flink-db4-plugin的工程,实现了两个扩展实现 1. FlinkCDCDB2SourceFactory 2. DB2SinkFactory 分别实现了对DB2数据库的增量读和写功能

    扩展点扩展实现
    MQListenerFactoryFlinkCDCDB2SourceFactory
    TISSinkFactoryDB2SinkFactory

    对于每一个扩展实现都有一组对应的文件与之对应,例如DB2SinkFactory.java文件来说,对应的属性描述文件有:

  3. /src/main/resources/com/qlangtech/tis/plugin/incr/extend/DB2SinkFactory.json

    用于描述插件属性的,如:默认值,下拉框列表枚举,placeholder等

  4. /src/main/resources/com/qlangtech/tis/plugin/incr/extend/DB2SinkFactory.md

    用户描述属性的基于MarkDown格式的帮助信息

  5. /src/test/java/com/qlangtech/tis/plugin/incr/extend/TestDB2SinkFactory.java

    对应的单元测试文件

  • 编写扩展实现类及相关

    以上由脚手架工程生成的三个文件,只是一个骨架,内容需要开发者进行扩充:

    1. 编写扩展实现类:
    2. 编写插件属性描述文件:
    3. 编写属性富文本描述文件:
    4. 编写扩展实现类单元测试:
  • 本地测试插件

    本地运行

    mvn com.qlangtech.tis:tis-archetype-run-plugin:run

    启动之后可通过 浏览器 http://localhost:8080/ 打开TIS,在浏览器中进行集成测试

插件打包

mvn package -Dmaven.test.skip=true

在本工程 tips目录中将生成一个后缀为.tpi 的文件,开发者可将该文件直接拷贝到 $TIS_HOME/data/libs/plugins 目录下,然后将TIS重启之后就可以直接使用该插件包中定义的扩展实现啦。 如要实现,可以通过TIS插件池安装插件,需要转入下一步,向TIS管理者提交合并申请

向TIS管理者提交合并申请

TIS每次发版会将TIS使用到的所有可用插件发布到TIS官方的插件仓库中,并且会基于这些插件包生成一份插件MetaData元数据清单文本,供后期本地TIS程序启动时加载使用。

开发者如想将自己开发的插件包提交到TIS的中央插件仓库中,可以按如下流程操作:

  1. 将自己开发的插件工程提交到Github的本人拥有权限的repo中
  2. https://github.com/datavane/tis/issues 中发起一个Issue,关于 插件包提交到TIS的中央插件仓库的申请,在Issue中需要说明该插件 实现的功能等信息
  3. 等待TIS管理者Review代码,如需需改代码,TIS管理者会主动通知,讨论后修改,最终由TIS管理者合并代码、发布。