.net core 微服务_一个轻量级的.Net Core微服务快速开发的轮子 - Go语言中文社区

.net core 微服务_一个轻量级的.Net Core微服务快速开发的轮子


83809edab1c2e3e8162fbed37dd54d3f.gif

前言

    Adnc是一个基于.Net Core前后端分离的轻量级微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发。框架基于JWT认证授权,包含基础的后台管理功能,代码简洁、易上手、学习成本低、开箱即用。
    Adnc对配置、依赖注入、日志、缓存、模型映射、认证/授权、仓储、服务注册/发现、健康检测、性能检测、Mq、Ef等模块进行更高一级的自动化封装,并规范了一套业务实现的代码规范与操作流程,使Asp.NetCore 框架更易于应用到实际项目开发中。

  • github:https://github.com/AlphaYu/Adnc

  • 演示网址:http://193.112.75.77 alpha2008/alpha2008

目录结构

  • clientApp 前端项目(vue)

  • serverApi 后端项目(dotnetcore)

  • doc 项目相关文档(数据库脚本/docker-compose.yaml文件)

  • tools 工具软件6263eec2b15b63c3001de89efa92bd95.png

ClientApp
  • ClientApp基于Vue-element-adminy以及web-flash搭建,感谢两位作者。

  • 技术栈 Vue + Vue-Router + Vuex + Axios

  • 构建步骤

    # Install dependencies 
    npm install --registry=https://registry.npm.taobao.org
    # Serve with hot reload at localhost:5001
    npm run dev
    # Build for production with minification
    npm run build:prod
  • 界面305e038e6c037b788f9a772bc7a62363.pnga5f312ff48e421819a9e46236ba1ba72.png

ServerApi
  • ServerApi基于dotnetcore3.1搭建。

  • 主要技术栈

名称描述
Ocelot基于 dotnetcore 编写的开源Api网关
Consul配置中心、服务发现/注册组件
Refit一个声明式自动类型安全的restful服务调用组件
SkyAPM.Agent.AspNetCoreskywalking .net core 探针,性能检测组件
AspNetCore.HealthChecks健康检测组件
AutofacIOC容器组件
Autofac.Extras.DynamicProxyAutfac AOP扩展
EfcoreORM组件
Dapper轻量级ORM组件
Z.EntityFramework.Plus.EFCore高新能的EfCore组件
NLog日志记录组件件
AutoMapper模型映射组件
Swashbuckle.AspNetCoreREST APIs文档生成工具(swagger)
EasyCaching实现一、二级缓存管理的一个开源的组件
CAP实现事件总线及最终一致性(分布式事务)的一个开源的组件
RabbitMq异步消息队列组件

项目介绍

Adnc.Infras 基础架构层

01.Adnc.WebApi.Shared

该层定义认证、鉴权、异常捕获等公共类与中间件。所有微服务WebApi层的共享层,都需要依赖该层。2c745186c4151c99c8427fca66bc8fae.png

02.Adnc.Application.Shared

该层定义了DTO对象的基类、应用服务类基类以及操作日志拦截器。所有微服务Application层的共享层,都需要依赖该层。59f501e89cfa61a6ed22426e86b5b46e.png

03.Adnc.Core.Shared

该层定义了Entity对象的基类、业务服务接口基类、Rpc服务通用服务、UOW接口与拦截器以及仓储接口。所有微服务Core层的共享层,都需要依赖该层。d835de99e46d747c686aef951bc48e06.png

04.Adnc.Common

该层定义了一些公用模型与常量以及一些通用帮助类。该层不依赖任何层。9d3f211e7a527bb4e396de851844de39.png

10.Adnc.Infr.Gateway

该层是一个输出项目,Api网关,基于ocelot实现,如果项目采用整体结构开发,该项目可以直接删除。ocelot网关包含路由、服务聚合、服务发现、认证、鉴权、限流、熔断、缓存、Header头传递等功能。市面上主流网关还有Kong,Traefik,Ambassador,Tyk等。85dc9bf3d6feb50e3338b92c966358ea.png

11.Adnc.Infr.HealthCheckUI

该层是一个输出项目, AspNetCore.HealthChecks组件的Dashboard,直接配置需要监测的服务地址就可以了,没有代码。

20.Adnc.Infr.Consul

该层集成了Consul。提供服务的注册、发现以及系统配置读取等公共类。563ed62e7f00381edb3265a01d0cb734.png

21.Adnc.Infr.EasyCaching

该层集成了EasyCaching。重写了EasyCaching拦截器部分代码,负责一、二级缓存的管理。a9e250c5e366c22717ffc3f6e6f6a0a6.png

22.Adnc.Infr.EfCore

该层负责Adnc.Core.Shared仓储接口与Uow的Ef实现,负责mysql数据库的操作。同时也集成了Dapper部分接口,用来处理复杂查询。6813de4b53f092089a8a2550d36ba41b.png

23.Adnc.Infr.Mongo

该层负责Adnc.Core.Shared仓储接口的Mongodb实现,负责mongodb数据库的操作。7dd2cf63ea2c232f6cf4455da04f3c21.png

23.Adnc.Infr.RabbitMq

该层集成了RabbitMq。封装了发布者与订阅者等公共类。5e069b99f49d0c7a3d7195870ae1d143.png

代码片段

    [Route("usr/session")]
[ApiController]
public class AccountController : ControllerBase
{
private readonly JWTConfig _jwtConfig;
private readonly IAccountAppService _accountService;
private readonly ILogger _logger;public AccountController(IOptionsSnapshot jwtConfig
, IAccountAppService accountService
, ILogger logger)
{
_jwtConfig = jwtConfig.Value;
_accountService = accountService;
_logger = logger;
}/// /// 登录/验证/// /// ///
[AllowAnonymous]
[HttpPost()]public async TaskLogin([FromBody]UserValidateInputDto userDto)
{var userValidateDto = await _accountService.Login(userDto);return new UserTokenInfoDto
{
Token = JwtTokenHelper.CreateAccessToken(_jwtConfig, userValidateDto),
RefreshToken = JwtTokenHelper.CreateRefreshToken(_jwtConfig, userValidateDto)
};
}
}
    public class AccountAppService : IAccountAppService
{
private readonly IMapper _mapper;
private readonly IEfRepository _userRepo;private readonly RabbitMqProducer _mqProducer;public AccountAppService(IMapper mapper,
IEfRepository userRepo,
RabbitMqProducer mqProducer)
{
_mapper = mapper;
_userRepo = userRepo;
_mqProducer = mqProducer;
}public async TaskLogin(UserValidateInputDto inputDto)
{var user = await _userRepo.FetchAsync(x => new { x.Password, x.Salt, x.Name, x.Email, x.RoleId,x.Account,x.ID,x.Status }
, x => x.Account == inputDto.Account);//todo......//..........
_mqProducer.BasicPublish(MqConsts.Exchanges.Logs, MqConsts.RoutingKeys.Loginlog, log);return _mapper.Map(user);
}
}

问题交流

  • 企 鹅 群:780634162

  • 博    客:https://www.cnblogs.com/alphayu

  • github  :https://github.com/alphayu

  • 项目网址:https://www.aspdotnetcore.net

License

MITFree Software, Hell Yeah!

f9bff5bc4cc8dfb2e94873f86d77eba0.png

往期 精彩 回顾

【推荐】.NET Core开发实战视频课程 ★★★

.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

【.NET Core微服务实战-统一身份认证】开篇及目录索引

Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

10个小技巧助您写出高性能的ASP.NET Core代码

用abp vNext快速开发Quartz.NET定时任务管理界面

在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

现身说法:实际业务出发分析百亿数据量下的多表查询优化

关于C#异步编程你应该了解的几点建议

C#异步编程看这篇就够了

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39620578/article/details/111175429
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-12-12 00:41:04
  • 阅读 ( 1289 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢