插件配置
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_path | Broker 与插件宿主之间的本地 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 定义请继续阅读 插件开发指南。