作为对原生插件的补充,可移植插件旨在提供相同的功能,同时允许在更通用的环境中运行并由更多语言创建。与原生插件类似,可移植插件也支持自定义 源、目标 和功能扩展。
创建插件的步骤与原生插件类似
我们的目标是为所有主流语言提供插件. 当前, go SDK and python SDK 已经支持.
与原生插件不同,portable 插件可以捆绑多个 *Symbol*。每个 Symbol 代表源、汇或功能的扩展。一个符号的实现就是实现类似于原生插件的 source、sink 或者 function 的接口。在 portable 插件模式下,就是用选择的语言来实现接口。 然后,用户需要创建一个主程序来定义和服务所有的符号。启动插件时将运行主程序。开发因语言而异,详情请查看 go SDK 和 python SDK。
我们提供了一个 portable 插件测试服务器来模拟 eKuiper 主程序部分,而开发者可以手动启动插件端以支持调试。
您可以在tools/plugin_test_server
中找到该工具。它只支持测试单个插件测试过程。
POST http://localhost:33333/symbol/start
Content-Type: application/json
{
"symbolName": "pyjson",
"meta": {
"ruleId": "rule1",
"opId": "op1",
"instanceId": 1
},
"pluginType": "source",
"config": {}
}
开发完成后,我们需要将结果打包成zip进行安装。在 zip 文件中,文件结构必须遵循以下约定并使用正确的命名:
或者,我们可以打包其他支持文件,如 install.sh
和依赖项。
在json文件中,我们需要描述这个插件的元数据。该信息必须与插件主程序中的定义相匹配。下面是一个例子:
{
"version": "v1.0.0",
"language": "go",
"executable": "mirror",
"sources": [
"random"
],
"sinks": [
"file"
],
"functions": [
"echo"
]
}
一个插件可以包含多个源、目标和函数,在 json 文件中的相应数组中定义它们。插件必须以单一语言实现,并在 language 字段中指定。此外, executable 字段需要指定插件主程序可执行文件。请参考 mirror.zip 。
使用Python插件时,用户可以通过指定以下属性为 Python 脚本指定一个虚拟环境。
conda
。详情请查看在虚拟环境运行。
通过将内容(json、可执行文件和所有支持文件)放在plugins/portables/${pluginName}
中,并将配置放在etc
下的相应目录中,可以在启动时自动加载可移植插件。
要在运行时管理可移植插件,我们可以使用 REST 或 CLI 命令。
目前,与原生插件相比,有两个方面的区别:
[]byte
,需要开发者自行解码。