之前写了篇文章大致说明了这个插件框架的设计理念。阿里这次通过他们的产品“宜搭”(据传一两天)就给卫健委搭建了一个联控平台,可见快速开发的重要性。
这次目标
不做任何开发,通过已有插件,组装一个类似maven仓库的服务。
工作流程
大致流程如下:
首先确保你有python3/JDK8基础环境。
安装命令行工具
pip install watchdog requests click uuid sfcli 配置数据库(两个)
基础数据库:basic_app_runtime(其他名字也可以)该库只有一张表:
CREATE TABLE `dict_store` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(256) DEFAULT NULL,
`value` text,
`dict_type` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;插件相关数据库: app_runtime_plugin_full (其他名字也可以)
创建&启动应用容器
sfcli create --name plugin_store --empty true进入plugin_store,修改config/application.yml下的数据库配置,配置上basic_app_runtime
现在可以启动容器了:
sfcli runtime默认监听端口是9007,你也可以通过config/application.yml修改端口。另外,系统会自动下载容器的发型包,你可以通过设置环境变量 APP_RUNTIME_JAR 设置或者在命令行里指定:
sfcli runtime --runtime_path ./app-runtime_2.11-1.0.2.jar因为这个包比较大,建议下载后配置环境变量使用。
安装基础插件
启动容器后,我们一共要安装三个插件
我们可以通过三个命令直接完成插件安装:
sfcli plugin --add app_runtime_with_db:1.0.0 --token "791f7d67-64bc-41ea-bb37-ede9f5c707c4"
sfcli plugin --add user-system:1.0.0 --token "791f7d67-64bc-41ea-bb37-ede9f5c707c4"
sfcli plugin \
--add ar_plugin_repo:1.0.0 \
--token "791f7d67-64bc-41ea-bb37-ede9f5c707c4"这里的token 是放在config/application.yml 最后一行的admin_token. app_runtime_withdb 会自动使用basic_app_runtime 数据库。 user-system 并不知道自己的数据库是哪个,所以需要告知下:
sfcli add_db --plugin_name user-system \
--host 127.0.0.1 \
--db_name app_runtime_plugin_full \
--user xxxx \
--password xxx \
--token "791f7d67-64bc-41ea-bb37-ede9f5c707c4"插件和插件之间会互相依赖。user-system 依赖 app_runtime_with_db , 而ar_plugin_repo 则同时依赖他们两。 插件之间的调用有两种方式:
Rest API调用的好处是,插件可以分开部署成多个实例,而Lib调用的话,则是调用效率更高,并且可以在A插件里直接完善B插件的功能。ar_plugin_repo 对user-system采用Rest API调用,而对 app_runtime_with_db 则采用库调用。
既然涉及到API调用,则需要告诉调用插件被调用插件的地址,因为目前我们都在同一个实例里,所以我们只要注册本地地址即可:
sfcli add_action_proxy --plugin_name user-system \
--url http://127.0.0.1:9007/run \
--token "791f7d67-64bc-41ea-bb37-ede9f5c707c4"完工。
截止到目前,我们已经获得一个完整的插件仓库应用,你可以上传和下载插件jar包了。下一篇,我们会讲解下如何开发ar_plugin_repo插件。