项目

微服务解决方案:多租户支持

您必须拥有 ABP Business 或更高级的许可证,才能创建微服务解决方案。

多租户是一种软件架构,其中软件的单个实例(代码库)在服务器上运行,并为多个租户提供服务。租户之间相互隔离,可以拥有自己的数据、配置和用户。本文档解释了微服务解决方案模板中多租户机制的工作原理。您可以查阅 多租户租户管理SaaS 文档以了解更多信息。

微服务解决方案中的多租户机制

只有在创建解决方案时选择了 SaaS(多租户) 选项,微服务解决方案模板才会采用 多租户 架构。

saas-module-selection

您可以为每个租户使用不同的数据库,或为所有租户共享一个数据库。在 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();
            }
        }
    }

在本文档中