跳到主要内容

插件配置

YedMQ 的插件系统采用进程模型。Broker 会扫描插件目录、启动子进程,并通过本地 socket 与插件通信。

Broker 侧配置

[plugin]
dir = "./plugins"
local_socket_path = "/tmp/yedmq_plugin.sock"
default_authorize_result = false
default_authenticate_result = false
配置项说明
dir插件根目录。每个插件都应位于该目录下的一级子目录中。
local_socket_pathBroker 与插件宿主之间的本地 IPC 地址。在 Windows 上可以使用命名管道风格路径,或让 YedMQ 根据该值推导。
default_authorize_result当没有插件返回鉴权结果时的兜底值。
default_authenticate_result当没有插件返回认证结果时的兜底值。

仓库自带的示例配置会把这两个兜底值都设为 false。按当前 Broker 行为,这意味着在没有认证或 ACL 插件时,MQTT 客户端会被拒绝;只有安装插件,或临时开启本地开发兜底后,客户端才能接入。

目录结构

plugins/
my-plugin/
plugin.toml
my-plugin

从当前加载实现看,目录名最好与 plugin.name 保持一致,因为运行时会按该插件目录去解析可执行文件路径。

随仓示例插件

主仓库提供了一个基于文件的 ACL 示例插件,位于 example_plugins/acl_file

  • 在类 Unix 环境下,make build-all 会把 debug 版 broker 和 acl_file 插件一起准备到 target/debug/
  • make build-all-release 会把 release 版产物准备到 target/release/
  • 生成出来的插件清单会给示例插件传入 --acl-file ./acl.json

插件清单文件

[plugin]
name = "my-plugin"
version = "0.1.0"
description = "Example YedMQ plugin"
author = "Your Name"
license = "Apache-2.0"

[runtime]
type = "process"
executable = "my-plugin"
working_dir = "."
timeout_secs = 12

运行时说明

  • 当前只支持 process 类型。
  • 可执行文件路径相对于插件目录解析。
  • 插件会通过配置的本地 socket 回连到宿主。
  • 当前运行时内部仍主要使用固定的请求/心跳超时,因此 timeout_secs 更接近描述性元数据,而不是完整的运行时开关。

当前接入模型

插件会在初始化阶段声明 hook,YedMQ 按优先级进行排序。当前 Broker 侧主要接入的流程包括:

  • 认证
  • 鉴权
  • 消息发布处理
  • 断连、订阅生命周期及相关事件流

协议细节和 hook 定义请继续阅读 插件开发指南