ABP框架微服务解决方案添加新微服务指南

ABP框架微服务解决方案添加新微服务指南

abp Open-source web application framework for ASP.NET Core! Offers an opinionated architecture to build enterprise software solutions with best practices on top of the .NET. Provides the fundamental infrastructure, cross-cutting-concern implementations, startup templates, application modules, UI themes, tooling and documentation. abp 项目地址: https://gitcode.com/gh_mirrors/abp1/abp

前言

在现代化应用开发中,微服务架构因其灵活性、可扩展性和独立性而广受欢迎。ABP框架为开发者提供了完整的微服务解决方案模板,本文将详细介绍如何在现有ABP微服务解决方案中添加一个新的微服务模块。

准备工作

在开始之前,请确保:

  1. 已安装最新版本的ABP CLI工具
  2. 拥有有效的ABP商业版或更高版本许可证
  3. 已有一个基于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作用域

有两种方式为认证服务器添加新作用域:

  1. 通过OpenIddict管理UI

    • 导航到管理区域
    • 选择OpenId->Scopes
    • 添加新作用域"OrderService"
  2. 通过OpenIddictDataSeeder: 修改OpenIddictDataSeeder.cs文件(注意有两个位置需要修改),在CreateApiScopesAsync方法中添加:

await CreateScopesAsync("OrderService");

客户端配置

配置Swagger客户端

更新WebGateway_Swagger客户端,添加OrderService作用域:

  1. 通过管理UI

    • 编辑WebGateway_Swagger客户端
    • 添加OrderService作用域
    • 添加重定向URI:https://localhost:44459/swagger/oauth2-redirect.html
  2. 通过代码: 修改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开发

  1. OrderService.Web项目中开发UI
  2. 在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" />
  1. 在Web模块中添加依赖:
typeof(OrderServiceHttpApiClientModule),
typeof(OrderServiceWebModule)

总结

通过以上步骤,我们成功地在ABP微服务解决方案中添加了一个全新的微服务模块,并完成了认证、网关、数据库迁移和前端集成等关键配置。这种模块化的扩展方式保持了系统的松耦合特性,同时确保了新服务能够无缝集成到现有架构中。

在实际开发中,建议按照业务边界划分微服务,每个服务专注于单一业务功能,通过清晰的API边界与其他服务交互。ABP框架提供的这套微服务解决方案模板,极大地简化了微服务架构的初始搭建和后续扩展工作。

abp Open-source web application framework for ASP.NET Core! Offers an opinionated architecture to build enterprise software solutions with best practices on top of the .NET. Provides the fundamental infrastructure, cross-cutting-concern implementations, startup templates, application modules, UI themes, tooling and documentation. abp 项目地址: https://gitcode.com/gh_mirrors/abp1/abp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖崧革

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值