【愚公系列】2022年07月 .NET架构班 084-微服务专题 Abp vNext微服务通信

举报
愚公搬代码 发表于 2022/07/31 00:07:28 2022/07/31
【摘要】 前言微服务之间的通信,需要根据业务需求和架构的实际情况选择合适的方案,基于HTTP的REST API是最常见的选择,但并不是唯一的选择,需要考虑复杂性、性能、可扩展性等方面的权衡。微服务1和微服务2之间建立连接,然后通过连接,微服务1向微服务2请求数据。这就是微服务连接。 一、Abp vNext微服务通信 1.Syzm.BaseManager.HttpApi.Client项目准备先创建基础...

前言

微服务之间的通信,需要根据业务需求和架构的实际情况选择合适的方案,基于HTTP的REST API是最常见的选择,但并不是唯一的选择,需要考虑复杂性、性能、可扩展性等方面的权衡。
在这里插入图片描述
微服务1和微服务2之间建立连接,然后通过连接,微服务1向微服务2请求数据。这就是微服务连接。

一、Abp vNext微服务通信

1.Syzm.BaseManager.HttpApi.Client项目准备

先创建基础信息详情聚合服务项目Syzm.BaseManager.HttpApi.Client
在这里插入图片描述

然后在Syzm.BaseManager.HttpApi.Client项目中,修改BaseManagerHttpApiClientModule类代码,如下:

using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;

namespace Syzm.BaseManager;

[DependsOn(
    typeof(BaseManagerApplicationContractsModule),
    typeof(AbpHttpClientModule))]
public class BaseManagerHttpApiClientModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddHttpClientProxies(
            typeof(BaseManagerApplicationContractsModule).Assembly,
            BaseManagerRemoteServiceConsts.RemoteServiceName
        );

        Configure<AbpVirtualFileSystemOptions>(options =>
        {
            options.FileSets.AddEmbedded<BaseManagerHttpApiClientModule>();
        });

    }
}

public class BaseManagerRemoteServiceConsts
{
    public const string RemoteServiceName = "BaseManager";

    public const string ModuleName = "baseManager";
}

RemoteServiceName = “BaseManager” 为基础信息微服务名称

2.Syzm.CMSDetailsServices项目准备

详细部署ABP web项目链接:https://codeboy.blog.csdn.net/article/details/122811497

先创建基础信息详情聚合服务项目Syzm.CMSDetailsServices
在这里插入图片描述

然后在Syzm.CMSDetailsServices项目中,引入Syzm.BaseManager.HttpApi.Client项目
在这里插入图片描述

然后在Syzm.CMSDetailsServices项目中,修改appsettings.json配置文件内容,新配置内容,如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "RemoteServices": {
    "BaseManager": {
      "BaseUrl": "http://localhost:44368/"
    }
  }
}

核心配置:

1、RemoteServices:配置基础信息微服务地址

2、BaseManager:为基础信息微服务名称

3、BaseUrl: “http://localhost:44368/” :为基础信息微服务具体地址

3.查询基础信息业务场景落地

3.1 基础信息微服务启动

输入命令:dotnet run
在这里插入图片描述

3.2 创建基础信息详情查询接口

先在Syzm.CMSDetailsServices项目中,创建Controllers文件夹,然后在Controllers中,创建CMSDetailsController类
在这里插入图片描述

然后在CMSDetailsController类中添加代码,如下:

using Microsoft.AspNetCore.Mvc;
using Syzm.BaseManager.BaseManager.Products;

namespace Syzm.CMSDetailsServices.Controllers
{
    [ApiController]
    [Route("api/CMSDetailsController/CMSDetails")]
    public class CMSDetailsController : ControllerBase
    {
        private readonly ILogger<CMSDetailsController> _logger;

        private IProductAppService _productAppService { set; get; }
        
        public CMSDetailsController(ILogger<CMSDetailsController> logger, IProductAppService productAppService)
        {
            _logger = logger;
            _productAppService = productAppService;
        }

        /// <summary>
        /// 获取基础信息详情
        /// </summary>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<ProductDto> Get(Guid id)
        {
            // 1、查询基础信息
            ProductDto productDto = await _productAppService.GetAsync(id);
            // 2、返回基础信息
            return productDto;
        }
    }
}

核心代码:

1、IProductAppService :由Syzm.BaseManager.HttpApi.Client提供的基础信息控制器操作接口。基础信息微服务提供

2、Get(Guid id):查询订单接口

3.3 创建订单接口访问

输入命令:dotnet run

然后在浏览器中,输入https://localhost:7265/swagger/index.html
在这里插入图片描述

核心解释:

​ 1、CMSDetails:为基础信息详情模块

​ 2、/api/CMSDetailsController/CMSDetails/{id}:为基础信息查询接口

3、然后访问/api/CMSDetailsController/CMSDetails/{id},输入基础信息Id:ce22f0e6-82b9-dcea-9fb8-3a04f3a5a59d。查询基础信息结果

如图所示:
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。