广州 深圳 外贸网站建设公司,富阳seo关键词优化,食品网站开发的背景,优化设计五年级上册语文答案准备工作#xff1a; 1.登录ABPvNext官网 网址 http://abp.io 2.跳转到商业版的说明文档#xff0c;目前商业版没有中文#xff0c;只能使用谷歌浏览器的内置翻译功能了 3.框架的相关环境要求#xff0c;请自自行查看 适用于 Windows 的Visual Studio 2022 (v17.3) /…准备工作 1.登录ABPvNext官网 网址 http://abp.io 2.跳转到商业版的说明文档目前商业版没有中文只能使用谷歌浏览器的内置翻译功能了 3.框架的相关环境要求请自自行查看 适用于 Windows 的Visual Studio 2022 (v17.3) /适用于 Mac 的 Visual Studio。1个.NET 7.0节点 v16 或 v18Yarn 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 suite2.在打开的页面中点击 Create a New solution创建一个新的解决方案 3.创建使用微服务模板创建所以选择Microservice template 4.分别输入项目名称(Project Name) 输出目录(Output folder以及UI模式MVC,点击确定开始 创建项目 5项目生成完成后打开相关目录可以看到工具给生成的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.ps1cd ../..
}# 这个是官方提供的运行环境这个建议大家单独安装否则开发机器会很卡所以直接删除掉 #$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 $requiredServiceif( $isDockerImageUp ){Write-Host ($requiredService [up])}else{cd ./etc/docker/docker network create abpmicservie-networkdocker-compose -f docker-compose.infrastructure.yml -f docker-compose.infrastructure.override.yml up -dcd ../..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命令整体还原项目包 8.打开项目更改 shared/ABPMicServie.DbMigrator 项目的数据库链接字符串 9.在数据库中分别建立四个数据然后更改项目中链接字符串的IP用户名等 10.在ABPMicServie.DbMigrator项目右键→调试→启动新示例运行迁移项目如果链接字符串设置的没问题执行成功后数据库中相应表就应该已经生成完成可以查看一下数据库看看相应的表是否已经创建完成 11.接下来就是更改各个项目的链接字符串 根据原有链接修改 ABPMicServie.AuthServerABPMicServie.AdministrationService.HttpApi.HostABPMicServie.IdentityService.HttpApi.HostABPMicServie.ProductService.HttpApi.HostABPMicServie.SaasService.HttpApi.Host 12.接下来要修改各个项目的中间件配置包括 RabbitMQRedisElasticSearch等由于修改基本涵盖了appsgatewaysservices三个目录下的所有项目就不一一列举了 13.安装tye也是直接只用dotnet的控制台工具 dotnet tool install -g Microsoft.Tye --version 0.11.0-alpha.22111.114.安装完成后直接在项目目录的运行.ps1文件单击右键→使用powershell运行出现下面窗口 15.在浏览器中打开 localhost:8000,出现tye管理界面具体每个服务的端口日志都可以查看 16.访问web项目对应的端口我这次对应的端口为 https://localhost:44321/ ,看到这个界面说明web服务已正常运行接下来我们点击登录进入登录界面 17.微服务模式的登陆使用的统一认证方式所以在登录界面实际是调用了ABPMicServie.AuthServer相关的服务默认的管理用户名admin 密码1q2w3E* 这个密码是在迁移文件中设置的 18.登录成功看到如下页面就说明ABPvNext的微服务框架已顺利执行成功撒花
向现有解决方案中新增一个微服务 1.来到解决方案的根目录下打开powershell执行创建新服务的命令 //OrderService 是你新创建服务的名称建议试用Serviec结尾保证和其他服务的统一性
abp new OrderService -t microservice-service-pro 2.执行完成后services文件夹下会多出一个order目录这就是新增的微服务项目 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文件项目中有两个地方需要修改分别是 Acme.BookStore.DbMigrator\OpenIddictDataSeeder.csAcme.BookStore.IdentityService.HttpApi.Host\DbMigrations\OpenIddictDataSeeder.cs. 创建ApiScope await CreateScopesAsync(OrderService);然后在zymictest.OrderService.HttpApi.Host/appsettings.json 节点中新增 SwaggerClientId: WebGateway_Swagger 在ABPMicServie.DbMigrator/OpenIddictDataSeeder.cs文件的CreateClientsAsync方法中新增其他内部客户端的调用权限哪个客户端需要调用就添加哪个现在为了测试就讲所有的客户端都添加了图片里只截图了一个下面的每个客户端权限都添加了具体可以参考ProductService添加 在ABPMicServie.DbMigrator/OpenIddictDataSeeder.cs文件的CreateWebGatewaySwaggerClientsAsync方法中参照ProductService添加OrderService这是为了增加swagger的客户端 接下来ABPMicServie.IdentityService.HttpApi.Host项目中的OpenIddictDataSeeder.cs也要同步更改官方文档文档中解释是使用迁移命令就必须更改两个 CreateSwaggerClientAsync方法中需要修改两处一个是通过配置文件获取到的RootUrl然后把这个RootUrl拼接完整后添加到Swagger Client客户端中这个是授权服务中需要使用的 代码修改完成后 需要更改ABPMicServie.DbMigrator/appsettings.json 配置文件新增OrderService具体样式参考ProductServiceOrderService端口可以在ABPMicServie.OrderService.HttpApi.Host项目中查看 接下来更新网关的授权文件打开ABPMicServie.WebGateway项目的ABPMicServieWebGatewayModule.cs文件参考ProductService 新增一个OrderService 新增ABPMicServie.WebGateway/ocelot.json 的路由配置注意端口要更改成你orderservice项目的端口 新建一个OrderService的数据库并更改下面两个项目的数据库连接字符串 ABPMicServie.OrderService.HttpApi.HostABPMicServie.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/ 添加完成后的项目引用应该是这样的 在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中添加依赖 typeof(OrderServiceWebModule),
typeof(OrderServiceHttpApiClientModule) 在ABPMicServieWebModule.cs的AddAbpOpenIdConnect方法中添加OpenID 连接范围 接下来我们要更新tye配置文件把刚刚新建的微服务相关参数新增上去方便以后启动调试一定要修改端口号每个新的项目端口号都是不一致的 - name: order-serviceproject: services/order/src/Acme.BookStore.OrderService.HttpApi.Host/Acme.BookStore.OrderService.HttpApi.Host.csprojbindings:- protocol: httpsport: 45247 ***** do not forget to replace this port with yours *****env:- Kestrel__Certificates__Default__Path../../../../etc/dev-cert/localhost.pfx- Kestrel__Certificates__Default__Passworde8202f07-66e5-4619-be07-72ba76fde97f 接下来添加新服务的迁移配置更改ABPMicServie.DbMigrator/ABPMicServieDbMigrationService.cs,添加 在最后的生成迁移数据库之前一定记得把ABPMicServie.IdentityService.HttpApi.Host项目中的OpenIddictDataSeeder.cs文件也同步更改具体更改参见ABPMicServie.DbMigrator项目中的同名文件 重新使用运行.ps1运行所有项目后如果登录报错大概率是犹豫新增加的种子数据没有初始化到表中可以使用各种方式修改我这里使用简单粗暴的方式删除所有 ordreService的swagger授权报错是因为ABPMicServie.AuthServer/appsettings.json 中的跨域请求不设置的话获取时会报错
微服务间的通信同步-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中添加依赖 3.在ABPMicServie.OrderService.Application项目中添加ABPMicServie .ProductService.HttpApi.Client 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 TaskSampleDto GetAsync(){//调用另外一个服务的方法await _productAppService.CreateAsync(new ProductCreateDto() { Namezyzy, Price100 });returnnew SampleDto{Value 43};}[Authorize]public TaskSampleDto GetAuthorizedAsync(){return Task.FromResult(new SampleDto{Value 42});}
}5.这样直接调用会报错原因就是我们需要使用管理员登录到后台在管理→OPENID→应用程序中找到我们远程调用的应用程序“rderServiceClient”然后在操作菜单中添加上需要调用服务的相关权限比如这次我们要调用产品服务的相关权限那就产品服务相关权限添加上 6.这样当执行Sample的GetAsync()方法的时候就会同步调用另外一个微服务的新增接口实现的远程调用客户端授权以及权限管理的相关功能
微服务间的通信异步-RabbitMQ模式 1 .在ABPMicServie.OrderService.HttpApi.Host/appsettings.json中更改RabbitMQ的链接字符配置更改成你要使用的服务 在ABPMicServie.ProductService.Application.Contracts项目中添加一个用来传输数据的类如果其他服务需要使用使用这个类需要添加ABPMicServie.ProductService.Application.Contracts的引用注意循环引用的问题 在需要发送mq消息的类中使用IDistributedEventBus 发送消息其实这就是分布式消息总线 新建一个类继承 IDistributedEventHandlerSamplesEto 并实现HandleEventAsync方法注意新建的类一定要继承ITransientDependency生命周期接口否则不会被注入到系统中