Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也能够应用于单体架构系统的开发。框架基于JWT认证受权、集成了一系列微服务配套组件,代码简洁、易上手、学习成本低、开箱即用。
前端基于Vue、后端服务基于.Net Core 3.1搭建,也是一个先后端分离的框架。webapi遵循RESTful
风格,框架包含用户、角色、权限、部门管理;字典、配置管理;登陆、审计、异常日志管理等基础的后台模块。
框架对配置中心、依赖注入、日志、缓存、模型映射、认证/受权、仓储、服务注册/发现、健康检测、性能与链路监测、队列、ORM
、EventBus
等模块进行更高一级的自动化封装,更易于开发Asp.NET Core微服务项目。
前端
reids
、mysql
、rabbitmq
、mongodb
,以及如何在本地配置ClientApp、ServerApi。consul
集群、使用consul
注册中心、安装配置skywalking
,以及相关项目dockerfile
文件编写和配置等。Vue
).NET Core 3.1
)# 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
.NET CORE 3.1
搭建。名称 | 描述 |
---|---|
Ocelot | 基于 .NET Core 编写的开源网关 |
Consul | 配置中心、注册中心组件 |
Refit | 一个声明式自动类型安全的RESTful服务调用组件,用于同步调用其余微服务 |
SkyAPM.Agent.AspNetCore | Skywalking .NET Core 探针,性能链路监测组件 |
AspNetCore.HealthChecks | 健康监测组件,搭配consul的健康监测 |
Autofac | IOC容器组件 |
Autofac.Extras.DynamicProxy | Autfac AOP扩展 |
Efcore | 微软的ORM组件 |
Dapper | 轻量级ORM组件 |
Z.EntityFramework.Plus.EFCore | 第三方高性能的EfCore组件 |
NLog | 日志记录组件 |
AutoMapper | 模型映射组件 |
Swashbuckle.AspNetCore | APIs文档生成工具(swagger) |
EasyCaching | 实现了1、二级缓存管理的一个开源的组件 |
CAP | 实现事件总线及最终一致性(分布式事务)的一个开源的组件 |
RabbitMq | 异步消息队列组件 |
Polly | 一个 .NET 弹性和瞬态故障处理库,容许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略 |
Adnc.Infras
基础架构相关工程
Adnc.Portal
微服务相关工程
vue
该层实现了认证、鉴权、异常捕获等公共类和中间件。全部微服务WebApi层的共享层,而且都须要依赖该层。
mysql
该层定义了DTO对象的基类、Rpc服务通用服务、应用服务类基类以及操做日志拦截器。全部微服务Application层的共享层,而且都须要依赖该层。
react
该层定义了Entity对象的基类、业务服务接口基类、UOW接口与拦截器、仓储接口、以及处理本地事务与分布式事务。全部微服务Core层的共享层,而且都须要依赖该层。
ios
该层实现了一些通用帮助类。该层不依赖任何层。
git
该层是一个输出项目,基于Ocelot实现的Api网关,若是项目采用总体结构开发,该项目能够直接删除。ocelot网关包含路由、服务聚合、服务发现、认证、鉴权、限流、熔断、缓存、Header头传递等功能。市面上主流网关还有Kong,Traefik,Ambassador,Tyk等。
github
该层是一个输出项目, AspNetCore.HealthChecks组件的Dashboard,直接配置须要监测的服务地址就能够了,没有代码,关键的代码参考webapi层的AddHealthChecks()方法。
web
该层集成了Consul,提供服务的自动注册、发现以及系统配置读写。
sql
该层集成了EasyCaching,负责1、二级缓存的管理,并重写了EasyCaching拦截器部分代码。
mongodb
该层负责Adnc.Core.Shared仓储接口与Uow的EfCore的实现,负责mysql数据库的操做。同时也集成了Dapper部分接口,用来处理复杂查询。
该层负责Adnc.Core.Shared仓储接口的Mongodb实现,负责mongodb数据库的操做。
该层集成了RabbitMq。封装了发布者与订阅者等公共类,方便更加便捷的调用rabbitmq。
该层都是具体微服务业务的实现。
Adnc.Usr
用户中心微服务,实现了用户、角色、权限、部门管理。
Adnc.Maint
运维中心微服务,实现了登陆、审计、异常日志管理以及一些配套组件的外链。
Adnc.Cus
客户中心微服务,该层主要是一些demo。
每一个微服务的Migrations层是Efcore用来作数据迁移的,迁移的日志文件存放在各自Migrations目录中。
[Route("usr/session")] [ApiController] public class AccountController : ControllerBase { private readonly JWTConfig _jwtConfig; private readonly IAccountAppService _accountService; private readonly ILogger<AccountController> _logger; public AccountController(IOptionsSnapshot<JWTConfig> jwtConfig , IAccountAppService accountService , ILogger<AccountController> logger) { _jwtConfig = jwtConfig.Value; _accountService = accountService; _logger = logger; } /// <summary> /// 登陆/验证 /// </summary> /// <param name="userDto"><see cref="UserValidateInputDto"/></param> /// <returns></returns> [AllowAnonymous] [HttpPost()] public async Task<UserTokenInfoDto> Login([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<SysUser> _userRepo; private readonly RabbitMqProducer _mqProducer; public AccountAppService(IMapper mapper, IEfRepository<SysUser> userRepo, RabbitMqProducer mqProducer) { _mapper = mapper; _userRepo = userRepo; _mqProducer = mqProducer; } public async Task<UserValidateDto> Login(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<UserValidateDto>(user); } }
MIT
Free Software, Hell Yeah!