跳到主要内容

Micronaut 多租户

帮助完成常见的任务,如解决多租户 Micronaut 应用程序的租户问题。

1. 发布历史

对于此项目,你可以在这里找到一个发布列表(含发布说明):

https://github.com/micronaut-projects/micronaut-multitenancy/releases

2. 介绍

多租户,因为它与软件开发有关,当一个应用程序的单一实例被用来服务于多个客户(租户)时,每个租户的数据是与其他客户隔离的。

要使用 Micronaut 的多租户功能,你必须在你的 classpath 上有 multitenancy 依赖。

implementation("io.micronaut.multitenancy:micronaut-multitenancy")

支持多租户的一个共同要求是能够解决当前租户的问题。Micronaut 带有以下内置的租户解析器:

名字描述
CookieTenantResolver从一个 HTTP cookie 中解析当前租户。参阅 CookieTenantResolver 配置属性
FixedTenantResolver针对一个固定的租户 ID 进行解析。参阅 FixTenantResolver 配置属性
HttpHeaderTenantResolver从请求的 HTTP 头中解决当前租户的问题。参阅 FixTenantResolver 配置属性
PrincipalTenantResolver从认证的用户名中解析当前租户。参阅 PrincipalTenantResolver 配置属性
SessionTenantResolver从 HTTP 会话中解析当前租户。参阅 SessionTenantResolver 配置属性
SubdomainTenantResolver从子域中解析租户 ID。参阅 SubdomainTenantResolver 配置属性
SystemPropertyTenantResolver从一个系统属性中解析租户 ID。参阅 SystemPropertyTenantResolver 配置属性

Micronaut 支持租户传播。作为一个例子,请看以下场景:

multitenancy

你希望对 gateway 微服务的传入请求能通过子域来解决租户 id。然而,你希望你对其他内部微服务的请求包括作为 HTTP 头的 tenant Id

你在 gateway 微服务中的配置将看起来像:

micronaut:
multitenancy:
propagation:
enabled: true
service-id-regex: 'catalogue'
tenantresolver:
subdomain:
enabled: true
tenantwriter:
httpheader:
enabled: true

在目录的微服务中,配置将看起来像:

micronaut:
multitenancy:
tenantresolver:
httpheader:
enabled: true

为了传播租户,你将需要把解析的租户 id 写到发出的请求中。

目前,Micronaut 提供了两个内置的 TenantWriter 实现:

名字描述
CookieTenantWriter将当前租户写入你发出的请求中的一个 Cookie 中。参阅 CookieTenantWriter 配置属性
HttpHeaderTenantWriter将当前租户写入 HTTP Header 中。参阅 HttpHeaderTenantWriter 配置属性

3. 多租户 GORM

GORM 支持多租户,并与 Micronaut 多租户支持集成。

参阅 Micronaut Groovy 模块以了解更多信息。

4. 仓库

你可以在这个仓库中找到这个项目的源代码:

https://github.com/micronaut-projects/micronaut-multitenancy

英文链接