项目

微服务解决方案:功能管理

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

管理微服务负责管理功能,并被解决方案中的所有服务和应用程序使用。本文档解释了在微服务解决方案中功能管理的工作原理,这与权限管理类似。当我们向/api/abp/application-configuration发送请求时,网关应用程序会将请求转发给管理微服务。管理微服务返回包含当前用户租户功能的应用程序配置。您可以在应用程序配置中查看其详细信息。

由于功能管理是一个基础功能模块,每个微服务都依赖Volo.Abp.FeatureManagement.EntityFrameworkCoreVolo.Abp.FeatureManagement.MongoDB包。这些模块提供了检查功能所需的基础设施(例如IFeatureStore)。此外,管理微服务依赖Volo.Abp.FeatureManagement.ApplicationVolo.Abp.FeatureManagement.HttpApi包来管理功能。

功能管理

管理微服务提供了一组API来管理功能。功能在每个微服务中定义。当微服务启动时,如果FeatureManagementOptionsSaveStaticFeaturesToDatabase选项设置为true(默认为true),它会将其功能注册到相关的功能定义表中,从而确保这一行为。之后,您可以从相关提供者(如租户版本)的功能管理对话框中查看这些功能。

租户功能

当您为某个微服务定义新功能后,需要重启该微服务以将新功能注册到功能定义表中。然后,您就可以在功能管理对话框中看到这些功能。

管理服务的功能管理选项

SaveStaticFeaturesToDatabase的默认值为true,用于将静态功能保存到数据库。每个微服务已经将其功能定义添加到相关表中。但是,还有另一个选项IsDynamicFeatureStoreEnabled,用于启用动态功能存储。我们只需要为管理微服务启用此选项,因为管理微服务是唯一负责管理功能的服务。其他服务和应用程序使用其自身的功能定义。

您可以在管理微服务模块的ConfigureFeatureManagement方法中看到此选项:

private void ConfigureFeatureManagement()
{
    Configure<FeatureManagementOptions>(options =>
    {
        options.IsDynamicFeatureStoreEnabled = true;
    });
}

创建新功能

您可以在相关微服务的Contracts项目中的MicroservicenameFeatureDefinitionProvider中定义新功能。由于现有的微服务采用单体模块方法,所有功能都来自相关模块。但是,如果需要,您可以创建新功能。

例如:

public class FormsFeatureDefinitionProvider : FeatureDefinitionProvider
{
    public override void Define(IFeatureDefinitionContext context)
    {
        var group = context.AddGroup(FormsFeatures.GroupName,
            L("Feature:FormsGroup"));

        group.AddFeature(FormsFeatures.Enable,
            "true",
            L("Feature:FormsEnable"),
            L("Feature:FormsEnableDescription"),
            new ToggleStringValueType());
    }

    private static LocalizableString L(string name)
    {
        return LocalizableString.Create<FormsResource>(name);
    }
}

在本文档中