微服务解决方案:多租户支持
您必须拥有 ABP Business 或更高级的许可证,才能创建微服务解决方案。
多租户是一种软件架构,其中软件的单个实例(代码库)在服务器上运行,并为多个租户提供服务。租户之间相互隔离,可以拥有自己的数据、配置和用户。本文档解释了微服务解决方案模板中多租户机制的工作原理。您可以查阅 多租户 、租户管理 和 SaaS 文档以了解更多信息。
微服务解决方案中的多租户机制
只有在创建解决方案时选择了 SaaS(多租户) 选项,微服务解决方案模板才会采用 多租户 架构。
您可以为每个租户使用不同的数据库,或为所有租户共享一个数据库。在 SaaS 模块中,您可以在连接字符串管理对话框中指定数据库连接字符串。所有缓存数据均按租户隔离。每个事件、后台作业及其他数据都带有租户 ID 进行存储。
在您的应用程序中,可以使用 ICurrentTenant 服务来获取当前租户信息。
public class MyService : ITransientDependency
{
private readonly ICurrentTenant _currentTenant;
public MyService(ICurrentTenant currentTenant)
{
_currentTenant = currentTenant;
}
public void MyMethod()
{
var tenantId = _currentTenant.Id;
var tenantName = _currentTenant.Name;
}
}
此外,您还可以使用数据过滤器系统来禁用租户过滤器,以列出同一数据库中的所有数据。
public class MyBookService : ITransientDependency
{
private readonly IDataFilter<IMultiTenant> _multiTenantFilter;
private readonly IRepository<Book, Guid> _bookRepository;
public MyBookService(
IDataFilter<IMultiTenant> multiTenantFilter,
IRepository<Book, Guid> bookRepository)
{
_multiTenantFilter = multiTenantFilter;
_bookRepository = bookRepository;
}
public async Task<List<Book>> GetAllBooksIncludingDeletedAsync()
{
//临时禁用 IMultiTenant 过滤器
using (_multiTenantFilter.Disable())
{
return await _bookRepository.GetListAsync();
}
}
}
抠丁客



