ABPvNext-微服务框架基础入门

这篇具有很好参考价值的文章主要介绍了ABPvNext-微服务框架基础入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ABPvNext-微服务框架基础入门

本文使用的是ABPvNext商业版 最新稳定版本7.0.2为演示基础的,后续如果更新,会单独写一篇最新版本的,此文为零基础入门教程,后续相关代码会同步更新到gitee仓库中。


准备工作:

  • 1.登录ABPvNext官网 网址 http://abp.io

    ABPvNext-微服务框架基础入门

  • 2.跳转到商业版的说明文档,目前商业版没有中文,只能使用谷歌浏览器的内置翻译功能了

    ABPvNext-微服务框架基础入门

  • 3.框架的相关环境要求,请自自行查看

    • 适用于 Windows 的Visual Studio 2022 (v17.3+) /适用于 Mac 的 Visual Studio。1个
    • .NET 7.0+
    • 节点 v16 或 v18
    • Yarn v1.20+(非 v2) 2或 npm v6+(已与 Node 一起安装)
    • Redis(作为分布式缓存)。
  • 4.安装ABP CLI工具,安装方式是使用dotnet命令行工具,作为.NET开发者,这个本机一定是有的了

    //安装或者更新构建工具,如果想与我这篇文章一样,请指定安装版本号
    dotnet tool install -g Volo.Abp.Cli
    
    //登录ABP官网账号,既然使用商业版,肯定是已经有相关账号了
    abp login <username>
    
    //安装 ABP 套件(主要功能是后续创建解决方案以及代码生成工具等)
    abp suite install
    
    
    

创建项目并启动:

  • 1.通过ABP提供的商业套件 新建一个项目,本次使用图形化方式创建

    //执行完成后会拉起一个控制台,和网页,不要关闭控制台
    abp suite
    
  • 2.在打开的页面中,点击 Create a New solution(创建一个新的解决方案)

    ABPvNext-微服务框架基础入门

  • 3.创建使用微服务模板创建,所以选择Microservice template

    ABPvNext-微服务框架基础入门

  • 4.分别输入项目名称(Project Name) 输出目录(Output folder)以及UI模式(MVC),点击确定,开始 创建项目

    ABPvNext-微服务框架基础入门

  • 5项目生成完成后,打开相关目录,可以看到工具给生成的ABPvNext微服务项目

    ABPvNext-微服务框架基础入门

  • 6.接下来,我们将run-tye.ps1文件打开,需要修改一下其中的一些配置(更改前)

    <# Check development certificates #>
    <# 本地的证书,由于项目分层,之间调用都是使用https方式,所以本地调试必须有证书 #>
    if (! (  Test-Path ".\etc\dev-cert\localhost.pfx" -PathType Leaf ) ){
       Write-Information "Creating dev certificates..."
       cd ".\etc\dev-cert"
       .\create-certificate.ps1
       cd ../..  
    }
    
    <# 这个是官方提供的运行环境,这个建议大家单独安装,否则开发机器会很卡,所以直接删除掉 #>
    
    $requiredServices = @(
      'sql-server-db',
      'grafana',
      'prometheus',
      'kibana',
      'rabbitmq',
      'elasticsearch',
      'redis'
    )
      
    foreach ($requiredService in $requiredServices) {  
    
        $nameParam = -join("name=", $requiredService)
      $serviceRunningStatus = docker ps --filter $nameParam
      $isDockerImageUp = $serviceRunningStatus -split " " -contains $requiredService
      
      if( $isDockerImageUp )
      {
        Write-Host ($requiredService + " [up]")
      }
      else
      {
          cd "./etc/docker/"
        docker network create abpmicservie-network
        docker-compose -f docker-compose.infrastructure.yml -f docker-compose.infrastructure.override.yml up -d
        cd ../..
        break;
      }
    }
    <# 这个后面会手动执行,所以也删除掉 #>
    cd "./shared/ABPMicServie.DbMigrator"
    dotnet run
    cd ../..
     
    
    <# Run all services #>
    
    tye run --watch
    
  • 我们将文件重命名为 运行.ps1,内容如下

    <# Check development certificates #>

    if (! ( Test-Path ".\etc\dev-cert\localhost.pfx" -PathType Leaf ) ){

    Write-Information "Creating dev certificates..."

    cd ".\etc\dev-cert"

    .\create-certificate.ps1

    cd ../..

    }

    <# Run all services #>

    tye run --watch

  • 7.先不要运行项目,在项目的根目录打开PowerShell,运行dotnet build命令,整体还原项目包

    ABPvNext-微服务框架基础入门

  • 8.打开项目,更改 shared/ABPMicServie.DbMigrator 项目的数据库链接字符串

    ABPvNext-微服务框架基础入门

  • 9.在数据库中分别建立四个数据,然后更改项目中链接字符串的IP,用户名等

    ABPvNext-微服务框架基础入门

  • 10.在ABPMicServie.DbMigrator项目右键→调试→启动新示例,运行迁移项目,如果链接字符串设置的没问题,执行成功后,数据库中相应表就应该已经生成完成,可以查看一下数据库,看看相应的表是否已经创建完成

    ABPvNext-微服务框架基础入门

  • 11.接下来就是更改各个项目的链接字符串 ,根据原有链接修改:

    • ABPMicServie.AuthServer
    • ABPMicServie.AdministrationService.HttpApi.Host
    • ABPMicServie.IdentityService.HttpApi.Host
    • ABPMicServie.ProductService.HttpApi.Host
    • ABPMicServie.SaasService.HttpApi.Host
  • 12.接下来要修改各个项目的中间件配置,包括 RabbitMQ,Redis,ElasticSearch等,由于修改基本涵盖了,apps,gateways,services三个目录下的所有项目,就不一一列举了

    ABPvNext-微服务框架基础入门

  • 13.安装tye,也是直接只用dotnet的控制台工具

    dotnet tool install -g Microsoft.Tye --version "0.11.0-alpha.22111.1"
    
  • 14.安装完成后,直接在项目目录的运行.ps1文件单击右键→使用powershell运行,出现下面窗口

    ABPvNext-微服务框架基础入门

  • 15.在浏览器中打开 localhost:8000,出现tye管理界面,具体每个服务的端口,日志都可以查看

    ABPvNext-微服务框架基础入门

  • 16.访问web项目对应的端口,我这次对应的端口为 https://localhost:44321/ ,看到这个界面说明web服务已正常运行,接下来我们点击登录,进入登录界面

    ABPvNext-微服务框架基础入门

  • 17.微服务模式的登陆使用的统一认证方式,所以在登录界面实际是调用了ABPMicServie.AuthServer相关的服务,默认的管理用户名:admin 密码:1q2w3E* 这个密码是在迁移文件中设置的

    ABPvNext-微服务框架基础入门

  • 18.登录成功,看到如下页面,就说明ABPvNext的微服务框架已顺利执行成功,撒花 😀

    ABPvNext-微服务框架基础入门

向现有解决方案中新增一个微服务

  • 1.来到解决方案的根目录下,打开powershell,执行创建新服务的命令

    //OrderService 是你新创建服务的名称,建议试用Serviec结尾,保证和其他服务的统一性
    abp new OrderService -t microservice-service-pro
    
    
    
  • 2.执行完成后,services文件夹下会多出一个order目录,这就是新增的微服务项目

    ABPvNext-微服务框架基础入门

  • 3.进入这个目录,使用powershell执行dotnet build 还原orderServie项目包

  • 4.接下来的操作就是将新建的服务新增到解决方案中,可以使用vs界面操作,我这里就介绍另外一种添加的方法,使用dotnet命令新增一个项目

    dotnet sln add services/order/src/ABPMicServie.OrderService.HttpApi.Host/ABPMicServie.OrderService.HttpApi.Host.csproj --solution-folder services
    
    
  • 接下来配置新增微服务的授权,新增授权主要是更改OpenIddictDataSeeder.cs文件,项目中有两个地方需要修改,分别是:

    1. Acme.BookStore.DbMigrator\OpenIddictDataSeeder.cs
    2. Acme.BookStore.IdentityService.HttpApi.Host\DbMigrations\OpenIddictDataSeeder.cs.
  • 创建ApiScope

    await CreateScopesAsync("OrderService");
    

    ABPvNext-微服务框架基础入门

  • 然后在:zymictest.OrderService.HttpApi.Host/appsettings.json 节点中新增

    "SwaggerClientId": "WebGateway_Swagger"

    ABPvNext-微服务框架基础入门

  • 在ABPMicServie.DbMigrator/OpenIddictDataSeeder.cs文件的CreateClientsAsync方法中,新增其他内部客户端的调用权限,哪个客户端需要调用,就添加哪个,现在为了测试,就讲所有的客户端都添加了,图片里只截图了一个,下面的每个客户端权限都添加了,具体可以参考ProductService添加

    ABPvNext-微服务框架基础入门

  • 在ABPMicServie.DbMigrator/OpenIddictDataSeeder.cs文件的CreateWebGatewaySwaggerClientsAsync方法中参照ProductService,添加OrderService,这是为了增加swagger的客户端

    ABPvNext-微服务框架基础入门

  • 接下来ABPMicServie.IdentityService.HttpApi.Host项目中的OpenIddictDataSeeder.cs也要同步更改,官方文档文档中解释是使用迁移命令就必须更改两个

  • CreateSwaggerClientAsync方法中需要修改两处,一个是通过配置文件获取到的RootUrl,然后把这个RootUrl拼接完整后,添加到Swagger Client客户端中,这个是授权服务中需要使用的

    ABPvNext-微服务框架基础入门

  • 代码修改完成后 需要更改ABPMicServie.DbMigrator/appsettings.json 配置文件,新增OrderService,具体样式参考ProductService,OrderService端口可以在ABPMicServie.OrderService.HttpApi.Host项目中查看

    ABPvNext-微服务框架基础入门

  • 接下来更新网关的授权文件,打开ABPMicServie.WebGateway项目的ABPMicServieWebGatewayModule.cs文件,参考ProductService ,新增一个OrderService

    ABPvNext-微服务框架基础入门

  • 新增ABPMicServie.WebGateway/ocelot.json 的路由配置,注意端口要更改成你orderservice项目的端口

    ABPvNext-微服务框架基础入门

  • 新建一个OrderService的数据库,并更改下面两个项目的数据库连接字符串

    • ABPMicServie.OrderService.HttpApi.Host,
    • ABPMicServie.DbMigrator
  • 在ABPMicServie.DbMigrator项目中添加OrderService的引用

    <ProjectReference Include="..\..\services\order\src\ABPMicServie.OrderService.Application.Contracts\ABPMicServie.OrderService.Application.Contracts.csproj"/>
       
    <ProjectReference Include="..\..\services\order\src\ABPMicServie.OrderService.EntityFrameworkCore\ABPMicServie.OrderService.EntityFrameworkCore.csproj"/>
    
    
  • 添加完成后的项目引用应该是这样的

    ABPvNext-微服务框架基础入门

  • 在ABPMicServie.DbMigrator/ABPMicServieDbMigratorModule.cs文件中添加模块的依赖

    typeof(OrderServiceApplicationContractsModule),
    typeof(OrderServiceEntityFrameworkCoreModule)
    
    
  • 为了在web项目中使用orderService微服务中的页面,我们需要讲引用添加到web项目中

        <ProjectReference Include="..\..\..\..\services\order\src\ABPMicServie.OrderService.HttpApi.Client\ABPMicServie.OrderService.HttpApi.Client.csproj" />
        <ProjectReference Include="..\..\..\..\services\order\src\ABPMicServie.OrderService.Web\ABPMicServie.OrderService.Web.csproj" />
    
  • 然后在ABPMicServie.Web/ABPMicServieWebModule.cs中添加依赖

    ABPvNext-微服务框架基础入门

    typeof(OrderServiceWebModule),
    typeof(OrderServiceHttpApiClientModule)
    
    
  • 在ABPMicServieWebModule.cs的AddAbpOpenIdConnect方法中,添加OpenID 连接范围

    ABPvNext-微服务框架基础入门

  • 接下来我们要更新tye配置文件,把刚刚新建的微服务相关参数新增上去,方便以后启动调试,一定要修改端口号,每个新的项目端口号都是不一致的

    ABPvNext-微服务框架基础入门

    ABPvNext-微服务框架基础入门

    - name: order-service
      project: services/order/src/Acme.BookStore.OrderService.HttpApi.Host/Acme.BookStore.OrderService.HttpApi.Host.csproj
      bindings:
        - protocol: https
          port: 45247 ***** do not forget to replace this port with yours *****
      env:
        - Kestrel__Certificates__Default__Path=../../../../etc/dev-cert/localhost.pfx
        - Kestrel__Certificates__Default__Password=e8202f07-66e5-4619-be07-72ba76fde97f
    
    
  • 接下来添加新服务的迁移配置,更改ABPMicServie.DbMigrator/ABPMicServieDbMigrationService.cs,添加

    ABPvNext-微服务框架基础入门

  • 在最后的生成迁移数据库之前,一定记得把ABPMicServie.IdentityService.HttpApi.Host项目中的OpenIddictDataSeeder.cs文件也同步更改,具体更改参见ABPMicServie.DbMigrator项目中的同名文件

  • 重新使用运行.ps1运行所有项目后,如果登录报错,大概率是犹豫新增加的种子数据没有初始化到表中,可以使用各种方式修改,我这里使用简单粗暴的方式,删除所有

  • ordreService的swagger授权报错,是因为ABPMicServie.AuthServer/appsettings.json 中的跨域请求,不设置的话获取时会报错

    ABPvNext-微服务框架基础入门

微服务间的通信(同步-HTTP代理模式)

目的:实现OrderService微服务中,调用ProductService的相关函数

  • 1.在OrderService.Application.Contracts中添加ProductService.Application.Contracts

    <ProjectReference Include="..\..\..\product\src\ABPMicServie.ProductService.Application.Contracts\ABPMicServie.ProductService.Application.Contracts.csproj" />
    
    
  • 2.在OrderServiceApplicationContractsModule.cs中添加依赖

    ABPvNext-微服务框架基础入门

  • 3.在ABPMicServie.OrderService.Application项目中添加ABPMicServie .ProductService.HttpApi.Client

    ABPvNext-微服务框架基础入门

  • 4.OrderServiceApplicationModule.cs添加依赖

    typeof(ProductServiceHttpApiClientModule)
    
    
  • 接下来做一个测试,在默认项目中的新增这段代码

    using System.Threading.Tasks;
    using ABPMicServie.ProductService.Products;//引用命名空间
    using Microsoft.AspNetCore.Authorization;
    
    namespace ABPMicServie.OrderService.Samples;
    
    public class SampleAppService : OrderServiceAppService, ISampleAppService
    {
        IProductAppService _productAppService;//构造函数注入
    
        public SampleAppService(IProductAppService productAppService)
        {
            _productAppService = productAppService;
        }
        public async Task<SampleDto> GetAsync()
        {
        //调用另外一个服务的方法
          await _productAppService.CreateAsync(new ProductCreateDto() { Name="zyzy", Price=100 });
            return
                new SampleDto
                {
                    Value = 43
                };
            
        }
    
        [Authorize]
        public Task<SampleDto> GetAuthorizedAsync()
        {
            return Task.FromResult(
                new SampleDto
                {
                    Value = 42
                }
            );
        }
    }
    

    ABPvNext-微服务框架基础入门

  • 5.这样直接调用会报错,原因就是我们需要使用管理员登录到后台,在管理→OPENID→应用程序中,找到我们远程调用的应用程序“rderServiceClient”,然后在操作菜单中,添加上需要调用服务的相关权限,比如这次我们要调用产品服务的相关权限,那就产品服务相关权限添加上

    ABPvNext-微服务框架基础入门

    ABPvNext-微服务框架基础入门

  • 6.这样当执行Sample的GetAsync()方法的时候,就会同步调用另外一个微服务的新增接口,实现的远程调用,客户端授权,以及权限管理的相关功能

微服务间的通信(异步-RabbitMQ模式)

  • 1 .在ABPMicServie.OrderService.HttpApi.Host/appsettings.json中更改RabbitMQ的链接字符配置,更改成你要使用的服务

    ABPvNext-微服务框架基础入门

  • 在ABPMicServie.ProductService.Application.Contracts项目中添加一个用来传输数据的类,如果其他服务需要使用使用这个类,需要添加ABPMicServie.ProductService.Application.Contracts的引用,注意循环引用的问题

    ABPvNext-微服务框架基础入门

  • 在需要发送mq消息的类中,使用IDistributedEventBus 发送消息,其实这就是分布式消息总线,

    ABPvNext-微服务框架基础入门

  • 新建一个类,继承 IDistributedEventHandler<SamplesEto> ,并实现HandleEventAsync方法,注意,新建的类一定要继承ITransientDependency生命周期接口,否则不会被注入到系统中

    ABPvNext-微服务框架基础入门文章来源地址https://www.toymoban.com/news/detail-413262.html

到了这里,关于ABPvNext-微服务框架基础入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第四章:前端框架Vue基础入门

    本章学习目标: 了解Vue框架架构思想 掌握Vue核心指令 掌握计算属性与监视 掌握组件化开发模式 官方文档:https://cn.vuejs.org/guide/introduction.html. 文档可选择使用optionsAPI(选项式API)阅读,或者CompositionApi(组合式API)阅读。选项式API更适合平滑从vue2过渡,以下示例均以Compositi

    2024年02月12日
    浏览(45)
  • 微服务框架Consul--新手入门

    Consul 是由 HashiCorp 开发的一款软件工具,提供了一组功能,用于服务发现、配置管理和网络基础设施自动化。它旨在帮助组织管理现代分布式和微服务架构系统的复杂性。以下是Consul的一些关键方面和功能: 服务发现:Consul 允许服务自行注册并以动态和自动化的方式发现其

    2024年02月07日
    浏览(45)
  • mfc入门基础(一)-单文档应用程序框架

    最近因为相关业务,需要接触下mfc的一些老代码,但是mfc上手并没有qt那么简单,所以四处寻找学习资料,发现一个写的挺好的教程,这边我进行转载下,学习的过程中进行了一些修改,总结下。 此处附上原文链接:鸡啄米MFC入门系列教程_逸适安然的博客-CSDN博客_鸡啄米 V

    2024年02月04日
    浏览(45)
  • Android全新UI框架之Jetpack Compose入门基础

    Jetpack Compose是什么 如果有跨端开发经验的同学,理解和学习compose可能没有那么大的压力。简单地说,compose可以让Android的原生开发也可以使用类似rn的jsx的语法来开发 UI界面 。以往,我们开发Android原生页面的时候,通常是在xml中画相关的UI控件,然后在activity中通过findViewB

    2024年02月21日
    浏览(45)
  • 微服务基础设施怎么建设,如何选择微服务框架

    微服务基础设施架构全貌 微服务 vs SOA 微服务基础设施优先级 微服务框架核心 模式1-嵌入式SDK式 【优点】 1. 架构简单,天然支持高性能、高可用; 2. 维护简单,无需维护独立的 Proxy 节点。 【缺点】 1. 应用侵入,需要集成 SDK,并联动升级; 2. 多语言重复开发 SDK 模式2-反向

    2024年01月23日
    浏览(59)
  • 开源 Golang 微服务入门一: HTTP 框架 Hertz

    从本篇笔记开始将介绍 Go 框架三件套(Web / RPC / ORM),框架的学习有助于后续课程的学习以及大项目的完成。本文主要介绍字节跳动的开源 Golang 微服务 HTTP 框架 Hertz。先了解一下三件套的相关基本知识,做一下铺垫: Gorm gorm是Golang语言中一个已经迭代数十年且功能强大、性

    2024年02月08日
    浏览(39)
  • 开源 Golang 微服务入门二:RPC 框架 Kitex

    前一篇笔记介绍了字节跳动的开源 Golang 微服务 HTTP 框架 Hertz, 如下: 开源 Golang 微服务入门一: HTTP 框架 Hertz 本文将要介绍同样是字节跳动开源的 Golang 微服务 RPC 框架 Kitex。 Kitex 简介 Kitex 字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部

    2024年02月09日
    浏览(44)
  • 开源 Golang 微服务入门三:ORM 框架 GORM

    前两篇笔记分别介绍了 Golang 微服务 HTTP 框架 Hertz 和 Golang 微服务 RPC 框架 Kitex,本文将要介绍面向ORM(持久层)框架 GORM。 官方文档 GORM 是面向 Golang 语言的一种 ORM(持久层)框架,支持多种数据库的接入,例如 MySQL,PostgreSQL,SQLite,SQL Server,Clickhouse。此框架的特点,弱化了开

    2024年02月14日
    浏览(37)
  • Go微服务框架及基础平台选择

    是否满足公司业务需求 维护状态 系统功能完整性 星标数 文档的完整性 安全性 项目简介 :Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。使用istio可以很简单的创建具有负载均衡、服务间认证、监控等功能的服务网络,而不需要对服务的代码进行任何修改。

    2024年02月04日
    浏览(39)
  • WPF基础入门-Class7-WPF-MVVN框架

    Class7-MVVN框架 使用框架可以省掉如Class6中的 ViewModelBase.cs 的 OnPropertyChanged ,亦方便命令传参 1、NuGet安装 CommunityToolkit.Mvvm (原Mircrosoft.Toolkit.Mvvm)也可以安装MVVMLight等其他集成库 2、显示页面: 2、model文件: 3、显示效果:

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包