多租户
概述
YedMQ 的多租户模型允许一个 Broker 部署同时服务多个逻辑组织,同时保持数据路径隔离。租户身份会影响会话、主题、保留消息以及管理 API。
默认情况下,没有被分配租户的连接会进入 public 租户。
每个租户隔离的内容
- 主题命名空间与路由
- 客户端会话身份
- 保留消息
- 客户端、主题、发布等 REST 资源
客户端 ID 只需要在所属租户内部保持唯一。
租户是如何分配的
租户分配由认证插件驱动。在客户端建立连接时,插件可以查看以下信息:
- 用户名与密码
- 客户端 ID
- 客户端 IP
- 认证请求里携带的其他连接元数据
插件返回 AuthenticateResponse,其中可以携带 tenant_id。
message AuthenticateResponse {
bool authenticated = 1;
// ...
optional string tenant_id = 5;
}
如果没有插件返回租户 ID,YedMQ 会把该连接保留在 public 租户中。
动态租户创建
YedMQ 会按需创建租户级状态。当认证流程或后续的租户级操作首次出现一个新的租户 ID 时,Broker 会自动初始化对应的内部结构。
带租户的 REST API 路径
常见的管理路径包括:
GET /api/v1/{tenant_id}/clientsGET /api/v1/{tenant_id}/topicsGET /api/v1/{tenant_id}/messages/retainedPOST /api/v1/{tenant_id}/messagesPOST /api/v1/{tenant_id}/clients/{client_id}/kickoff
这种路径设计让跨租户操作是显式的,而不是隐式发生的。