ABP框架微服务解决方案添加新微服务指南
前言
在现代化应用开发中,微服务架构因其灵活性、可扩展性和独立性而广受欢迎。ABP框架为开发者提供了完整的微服务解决方案模板,本文将详细介绍如何在现有ABP微服务解决方案中添加一个新的微服务模块。
准备工作
在开始之前,请确保:
- 已安装最新版本的ABP CLI工具
- 拥有有效的ABP商业版或更高版本许可证
- 已有一个基于ABP框架的微服务解决方案
创建新微服务
使用ABP CLI创建新微服务非常简单,执行以下命令:
abp new OrderService -t microservice-service-pro
此命令会在解决方案的services
文件夹下创建名为OrderService
的新微服务项目。
创建完成后,进入服务目录并构建项目:
cd services/order
dotnet build
将微服务加入主解决方案(可选)
虽然这不是必须步骤,但将新服务加入主解决方案可以方便统一管理:
dotnet sln add services/order/src/Acme.BookStore.OrderService.HttpApi.Host/Acme.BookStore.OrderService.HttpApi.Host.csproj --solution-folder services
注意:首次构建主解决方案时可能会出现错误,这是因为新项目引用了解决方案外的依赖。使用
dotnet build /graphBuild
命令可以解决此问题。
认证服务器配置
新微服务默认使用JWT Bearer认证,并在OrderServiceHttpApiHostModule
中配置了OrderService
作为受众:
JwtBearerConfigurationHelper.Configure(context, "OrderService");
配置API作用域
有两种方式为认证服务器添加新作用域:
-
通过OpenIddict管理UI:
- 导航到管理区域
- 选择OpenId->Scopes
- 添加新作用域"OrderService"
-
通过OpenIddictDataSeeder: 修改
OpenIddictDataSeeder.cs
文件(注意有两个位置需要修改),在CreateApiScopesAsync
方法中添加:
await CreateScopesAsync("OrderService");
客户端配置
配置Swagger客户端
更新WebGateway_Swagger
客户端,添加OrderService
作用域:
-
通过管理UI:
- 编辑
WebGateway_Swagger
客户端 - 添加
OrderService
作用域 - 添加重定向URI:
https://localhost:44459/swagger/oauth2-redirect.html
- 编辑
-
通过代码: 修改
OpenIddictDataSeeder.cs
中的CreateWebGatewaySwaggerClientsAsync
方法:
await CreateSwaggerClientAsync("WebGateway",
new[] { "AccountService", "IdentityService", "AdministrationService", "SaasService", "ProductService", "OrderService" });
更新应用设置
在IdentityService和DbMigrator项目的appsettings.json
中添加:
"OpenIddict": {
"Resources": {
"OrderService": {
"RootUrl": "https://localhost:44459"
}
}
}
网关配置
更新路由配置
修改yarp.json
文件,添加新路由和集群:
{
"ReverseProxy": {
"Routes": {
"Order": {
"ClusterId": "Order",
"Match": {
"Path": "/api/order-service/{**catch-all}"
}
},
"OrderSwagger": {
"ClusterId": "Order",
"Match": {
"Path": "/swagger-json/Order/swagger/v1/swagger.json"
},
"Transforms": [
{ "PathRemovePrefix": "/swagger-json/Order" }
]
}
},
"Clusters": {
"Order": {
"Destinations": {
"Order": {
"Address": "https://localhost:44459/"
}
}
}
}
}
}
更新Swagger配置
在网关项目中更新Swagger配置:
SwaggerConfigurationHelper.ConfigureWithOidc(
context: context,
authority: configuration["AuthServer:Authority"]!,
scopes: new[] {
"AccountService", "IdentityService", "AdministrationService",
"SaasService", "ProductService", "OrderService"
},
apiTitle: "Web Gateway API",
discoveryEndpoint: configuration["AuthServer:MetaAddress"]
);
数据库迁移配置
添加项目引用
在DbMigrator项目中添加:
<ProjectReference Include="..\..\services\order\src\Acme.BookStore.OrderService.Application.Contracts\Acme.BookStore.OrderService.Application.Contracts.csproj"/>
<ProjectReference Include="..\..\services\order\src\Acme.BookStore.OrderService.EntityFrameworkCore\Acme.BookStore.OrderService.EntityFrameworkCore.csproj"/>
更新模块依赖
在DbMigratorModule
中添加:
typeof(OrderServiceApplicationContractsModule),
typeof(OrderServiceEntityFrameworkCoreModule)
添加迁移代码
在DbMigrationService
中添加:
await MigrateDatabaseAsync<OrderServiceDbContext>(cancellationToken);
添加连接字符串
在appsettings.json
中添加:
"OrderService": "Server=(LocalDb)\\MSSQLLocalDB,1434;Database=BookStore_OrderService;User Id=sa;password=myPassw0rd;MultipleActiveResultSets=true"
前端集成
模块化UI开发
- 在
OrderService.Web
项目中开发UI - 在Web项目中添加引用:
<ProjectReference Include="..\..\..\..\services\order\src\Acme.BookStore.OrderService.HttpApi.Client\Acme.BookStore.OrderService.HttpApi.Client.csproj" />
<ProjectReference Include="..\..\..\..\services\order\src\Acme.BookStore.OrderService.Web\Acme.BookStore.OrderService.Web.csproj" />
- 在Web模块中添加依赖:
typeof(OrderServiceHttpApiClientModule),
typeof(OrderServiceWebModule)
总结
通过以上步骤,我们成功地在ABP微服务解决方案中添加了一个全新的微服务模块,并完成了认证、网关、数据库迁移和前端集成等关键配置。这种模块化的扩展方式保持了系统的松耦合特性,同时确保了新服务能够无缝集成到现有架构中。
在实际开发中,建议按照业务边界划分微服务,每个服务专注于单一业务功能,通过清晰的API边界与其他服务交互。ABP框架提供的这套微服务解决方案模板,极大地简化了微服务架构的初始搭建和后续扩展工作。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考