Micronaut 多租户
帮助完成常见的任务,如解决多租户 Micronaut 应用程序的租户问题。
1. 发布历史
对于此项目,你可以在这里找到一个发布列表(含发布说明):
https://github.com/micronaut-projects/micronaut-multitenancy/releases
2. 介绍
多租户,因为它与软件开发有关,当一个应用程序的单一实例被用来服务于多个客户(租户)时,每个租户的数据是与其他客户隔离的。
要使用 Micronaut 的多租户功能,你必须在你的 classpath 上有 multitenancy
依赖。
- Gradle
- Maven
implementation("io.micronaut.multitenancy:micronaut-multitenancy")
<dependency>
<groupId>io.micronaut.multitenancy</groupId>
<artifactId>micronaut-multitenancy</artifactId>
</dependency>
支持多租户的一个共同要求是能够解决当前租户的问题。Micronaut 带有以下内置的租户解析器:
名字 | 描述 |
---|---|
CookieTenantResolver | 从一个 HTTP cookie 中解析当前租户。参阅 CookieTenantResolver 配置属性。 |
FixedTenantResolver | 针对一个固定的租户 ID 进行解析。参阅 FixTenantResolver 配置属性。 |
HttpHeaderTenantResolver | 从请求的 HTTP 头中解决当前租户的问题。参阅 FixTenantResolver 配置属性。 |
PrincipalTenantResolver | 从认证的用户名中解析当前租户。参阅 PrincipalTenantResolver 配置属性。 |
SessionTenantResolver | 从 HTTP 会话中解析当前租户。参阅 SessionTenantResolver 配置属性。 |
SubdomainTenantResolver | 从子域中解析租户 ID。参阅 SubdomainTenantResolver 配置属性。 |
SystemPropertyTenantResolver | 从一个系统属性中解析租户 ID。参阅 SystemPropertyTenantResolver 配置属性。 |
Micronaut 支持租户传播。作为一个例子,请看以下场景:
你希望对 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