管理插件
本页面介绍了 EMQX 中插件的生命周期,并解释了如何使用 Dashboard、CLI 或 REST API 安装、配置、启动、停止、卸载和升级插件。
插件生命周期
EMQX 插件有三个主要生命周期状态:
- 已安装(Installed):插件的代码和配置已加载,但应用尚未启动。
- 已启动(Started):插件正在运行,并与 EMQX 活跃交互。
- 已卸载(Uninstalled):插件已从系统中完全移除。
安装流程
插件的安装流程如下:
- 通过 Dashboard、API 或 CLI 上传插件包(由
make rel
命令生成的.tar.gz
压缩包)。详细安装步骤参见安装和管理插件。 - 插件包会被分发至 EMQX 集群的每个节点。
- 在每个节点上:
- 压缩包保存在 EMQX 根目录下的
plugins
子目录(可通过plugins.install_dir
配置覆盖),例如:$EMQX_ROOT/plugins/my_emqx_plugin-1.0.0.tar.gz
。 - 插件包会被解压到同一目录:
$EMQX_ROOT/plugins/my_emqx_plugin-1.0.0/
。 - 插件初始配置文件(来自插件主应用的
config.hocon
)被复制到$EMQX_DATA_DIR/plugins/my_emqx_plugin/config.hocon
。 - 若存在 Avro schema,则会被加载以用于配置校验。
- 插件代码被加载到节点,但应用未启动。
- 插件在 EMQX 配置中被注册为
disabled
(禁用)状态,保存在plugins.states
字段中。
- 压缩包保存在 EMQX 根目录下的
TIP
对于插件,只有启用状态(即 enable
标志为 true
或 false
)保存在 EMQX 配置中。插件的完整配置保存在每个节点上的 $EMQX_DATA_DIR/plugins/my_emqx_plugin/config.hocon
文件中。
配置
插件安装后,可以通过 Dashboard 或 API 更新配置:
- 新配置将通过 Avro schema(如果存在)进行校验。
- 配置更新会分发到集群的所有节点。
- 插件的
on_config_changed/2
回调函数将被调用。如果插件接受该配置,则配置将被持久化写入$EMQX_DATA_DIR/plugins/my_emqx_plugin/config.hocon
。
TIP
即使插件应用尚未启动,on_config_changed/2
回调函数仍会被调用。
TIP
on_config_changed/2
回调函数会在集群每个节点上调用。避免编写依赖本地系统状态(例如检查网络可用性)的配置校验逻辑,这可能导致节点间结果不一致。应将此类检查逻辑放在 on_health_check/1
回调函数中,并在资源不可用时上报不健康状态。
启动
可通过 Dashboard、API 或 CLI 手动启动插件。启动时:
- 插件的应用被启动。
- 插件状态在 EMQX 配置中被标记为
enabled
(启用)。
当插件启动后被查询状态时,会调用其 on_health_check/1
回调函数以返回运行状态。
停止
插件被停止时:
- 插件的应用会被停止。
- 插件状态在 EMQX 配置中被标记为
disabled
(禁用)。
注意,虽然插件应用已停止,但其代码仍保留在节点中,因此即使停止状态下仍可以配置插件。
卸载流程
卸载流程如下:
- 如果插件正在运行,则先停止插件。
- 卸载插件代码。
- 删除插件包文件(配置文件会保留)。
- 插件从 EMQX 配置(
plugins.states
)中注销。
你可以通过 Dashboard 或 CLI 卸载插件,详见安装和管理插件。
集群节点加入行为
当新节点加入集群时,可能尚未安装或配置所需插件,因为插件及其配置是保存在每个节点的本地文件系统中的。
新节点将执行以下操作:
- 加入集群时,会同步整个 EMQX 的全局配置。
- 从全局配置中得知哪些插件已安装及其启用状态。
- 请求其他节点发送插件包和配置。
- 安装插件,并启动已启用的插件。
安装和管理插件
EMQX 支持通过 Dashboard、CLI 和 API 安装、卸载和管理插件包。
通过 Dashboard 安装插件
假设你已经构建好插件,并且已有 my_emqx_plugin-1.0.0.tar.gz
文件。可按照以下步骤在 Dashboard 中安装:
安全性更新
出于安全考虑,现在通过 Dashboard 安装插件需要显式授权:
- 必须先授予安装权限,才能开始上传安装流程。
- 授权状态是临时的,安装完成后会自动失效。
- 如果是集群环境,所有节点都需提前授权。
使用 CLI 显式授权:
bashemqx ctl plugins allow $NAME-$VSN
{NAME}
:插件名称(如my_emqx_plugin
)。{VSN}
:插件版本(如1.0.0
)。
打开 EMQX Dashboard,进入管理 > 插件页面。
点击 + 安装插件按钮,打开上传页面。
拖放或选择插件包文件上传。
点击安装,插件即会被安装并显示在插件列表中。
现在,您可以启动/停止插件并进行配置。若要卸载插件,可点击插件列表中更多 > 卸载。
要撤销先前授予的安装权限,可:
卸载已安装插件,或
使用以下命令显式撤销授权:
bashemqx ctl plugins disallow $NAME-$VSN
通过 CLI 安装插件
假设你已经构建好插件,并且已有 my_emqx_plugin-1.0.0.tar.gz
文件。可在 CLI 上按以下步骤操作:
将插件包复制到 EMQX 插件目录:
bashcp my_emqx_plugin-1.0.0.tar.gz $EMQX_HOME/plugins
安装插件:
bashemqx ctl plugins install my_emqx_plugin-1.0.0
查看插件列表:
bashemqx ctl plugins list
启动 / 停止插件:
bashemqx ctl plugins start my_emqx_plugin-1.0.0 emqx ctl plugins stop my_emqx_plugin-1.0.0
卸载插件:
bashemqx ctl plugins uninstall my_emqx_plugin-1.0.0
通过 API 安装插件
假设你已经构建好插件,并且已有 my_emqx_plugin-1.0.0.tar.gz
文件。插件包构建完成后,可以使用 REST API 安装:
首先需要授权安装:
bashemqx ctl plugins allow my_emqx_plugin-1.0.0
使用
curl
上传并安装插件:bashcurl -u $KEY:$SECRET -X POST http://$EMQX_HOST:18083/api/v5/plugins/install \ -H "Content-Type: multipart/form-data" \ -F "plugin=@my_emqx_plugin-1.0.0.tar.gz"
查看插件列表确认安装成功:
bashcurl -u $KEY:$SECRET http://$EMQX_HOST:18083/api/v5/plugins | jq
启动 / 停止插件:
bashcurl -s -u $KEY:$SECRET -X PUT \ "http://$EMQX_HOST:18083/api/v5/plugins/my_emqx_plugin-1.0.0/start" curl -s -u $KEY:$SECRET -X PUT \ "http://$EMQX_HOST:18083/api/v5/plugins/my_emqx_plugin-1.0.0/stop"
插件升级
EMQX 不支持同时安装同一插件的多个版本。
要安装插件新版本:
- 必须先卸载旧版本;
- 然后再安装新版本。
插件配置会在升级过程中保留。