项目

部署分布式/微服务解决方案

ABP专为分布式和微服务系统设计,支持多个应用程序和/或服务内部通信。其所有功能均兼容分布式场景。本文档重点介绍在部署分布式或微服务解决方案时需考虑的关键点。

应用程序名称与实例ID

ABP提供IApplicationInfoAccessor服务,包含以下属性:

  • ApplicationName:应用程序的可读名称,具有唯一性
  • InstanceId:每次启动应用程序时由ABP生成的随机(GUID)值

ABP在多处使用这些值来区分系统中的应用程序及其实例(进程)。例如,审计日志 系统会在每条审计记录中保存ApplicationName,以便追踪记录来源。若系统包含多个向统一端点写入审计日志的应用程序,需确保每个应用程序具有不同的ApplicationName

默认情况下,ApplicationName值自动从入口程序集名称(通常为.NET解决方案中的项目名)获取,这在多数场景下适用,因为每个应用程序通常具有唯一的入口程序集名称。

可通过两种方式设置不同的应用程序名称:第一种方法是在应用程序的 配置 中设置ApplicationName属性。最简单的方式是在appsettings.json文件中添加字段:

{
    "ApplicationName": "Services.Ordering"
}

第二种方式是在创建ABP应用程序时设置AbpApplicationCreationOptions.ApplicationName。可在解决方案中找到AddApplicationAddApplicationAsync调用(通常在Program.cs文件中),按如下方式设置:

await builder.AddApplicationAsync<OrderingServiceHttpApiHostModule>(options =>
{
    options.ApplicationName = "Services.Ordering";
});

使用分布式事件总线

ABP的 分布式事件总线 系统提供了与其他应用程序和服务通信的标准接口。虽然名为"分布式",但默认实现为进程内通信。这意味着除非显式配置分布式事件总线提供程序,否则应用程序/服务无法相互通信。

构建分布式系统时,应用程序应通过外部分布式消息服务器进行通信。请参阅 分布式事件总线 文档了解如何安装和配置分布式事件总线提供程序。

警告:即使未在应用代码中直接使用分布式事件总线,ABP及某些使用的模块可能会调用该功能。因此构建分布式系统时,请务必配置分布式事件总线提供程序。

提示:单应用程序的 集群部署 不被视为分布式系统。若仅存在通过负载均衡器提供服务的多实例单应用,则可能不需要真正的分布式消息服务器。

另请参阅

在本文档中