跳到主要内容

多租户

概述

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}/clients
  • GET /api/v1/{tenant_id}/topics
  • GET /api/v1/{tenant_id}/messages/retained
  • POST /api/v1/{tenant_id}/messages
  • POST /api/v1/{tenant_id}/clients/{client_id}/kickoff

这种路径设计让跨租户操作是显式的,而不是隐式发生的。