微服务解决方案:功能管理
您必须拥有ABP商业版或更高级的许可,才能创建微服务解决方案。
管理微服务负责管理功能,并被解决方案中的所有服务和应用程序使用。本文档解释了在微服务解决方案中功能管理的工作原理,这与权限管理类似。当我们向/api/abp/application-configuration发送请求时,网关应用程序会将请求转发给管理微服务。管理微服务返回包含当前用户租户功能的应用程序配置。您可以在应用程序配置中查看其详细信息。
由于功能管理是一个基础功能模块,每个微服务都依赖Volo.Abp.FeatureManagement.EntityFrameworkCore或Volo.Abp.FeatureManagement.MongoDB包。这些模块提供了检查功能所需的基础设施(例如IFeatureStore)。此外,管理微服务依赖Volo.Abp.FeatureManagement.Application和Volo.Abp.FeatureManagement.HttpApi包来管理功能。
功能管理
管理微服务提供了一组API来管理功能。功能在每个微服务中定义。当微服务启动时,如果FeatureManagementOptions的SaveStaticFeaturesToDatabase选项设置为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);
}
}
抠丁客



