前言

    Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发。框架基于JWT认证授权、集成了一系列微服务配套组件,代码简洁、易上手、学习成本低、开箱即用。

    前端基于Vue、后端服务基于.Net Core 3.1搭建,也是一个前后端分离的框架。webapi遵循RESTful风格,框架包含用户、角色、权限、部门管理;字典、配置管理;登录、审计、异常日志管理等基础的后台模块。

    框架对配置中心、依赖注入、日志、缓存、模型映射、认证/授权、仓储、服务注册/发现、健康检测、性能与链路监测、队列、ORMEventBus等模块进行更高一级的自动化封装,更易于开发Asp.NET Core微服务项目。

GitHub

演示

相关文档

如何快速跑起来

如何手动部署到服务器

  • 详细介绍如何使用docker安装consul集群、使用consul注册中心、安装配置skywalking,以及相关项目dockerfile文件编写和配置等。

    请点击链接,查看详细介绍

目录结构

  • ClientApp 前端项目(Vue)
  • ServerApi 后端项目(.NET Core 3.1)
  • Doc 项目相关文档(sql脚本、docker脚本、docker-compose.yaml文件)
  • Tools 工具软件

ClientApp 前端项目

  • ClientApp基于Vue-Element-Admin以及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
  • 界面



ServerApi 后端项目

  • ServerApi基于.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 实现了一、二级缓存管理的一个开源的组件
CAP 实现事件总线及最终一致性(分布式事务)的一个开源的组件
RabbitMq 异步消息队列组件
Polly 一个 .NET 弹性和瞬态故障处理库,允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略

后端解决方案

整体架构图

Adnc.Infras 基础架构相关工程

Adnc.Portal 微服务相关工程

Adnc.Infras 基础架构相关工程

01.Adnc.WebApi.Shared

该层实现了认证、鉴权、异常捕获等公共类和中间件。所有微服务WebApi层的共享层,并且都需要依赖该层。

02.Adnc.Application.Shared

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

03.Adnc.Core.Shared

该层定义了Entity对象的基类、业务服务接口基类、UOW接口与拦截器、仓储接口、以及处理本地事务与分布式事务。所有微服务Core层的共享层,并且都需要依赖该层。

04.Adnc.Infr.Common

该层实现了一些通用帮助类。该层不依赖任何层。

10.Adnc.Infr.Gateway

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

11.Adnc.Infr.HealthCheckUI

该层是一个输出项目, AspNetCore.HealthChecks组件的Dashboard,直接配置需要监测的服务地址就可以了,没有代码,关键的代码参考webapi层的AddHealthChecks()方法。

20.Adnc.Infr.Consul

该层集成了Consul,提供服务的自动注册、发现以及系统配置读写。

21.Adnc.Infr.EasyCaching

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

22.Adnc.Infr.EfCore

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

23.Adnc.Infr.Mongo

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

23.Adnc.Infr.RabbitMq

该层集成了RabbitMq。封装了发布者与订阅者等公共类,方便更加便捷的调用rabbitmq。

Adnc.Portal 微服务相关工程

该层都是具体微服务业务的实现。

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);
}
}

问题交流

License

MIT

Free Software, Hell Yeah!

一个轻量级的.Net Core微服务快速开发的轮子的更多相关文章

  1. Adnc如何本地调试 - 一个轻量级的.Net Core微服务开发框架

    前言     Adnc是一个轻量级的.Net Core微服务开发框架,同样适用于单体架构系统的开发.     如果只是想本地调试,只需要安装必备软件,必备软件除开发工具外,其它软件建议大家都使用`do ...

  2. net core 微服务 快速开发框架 Viper 初体验2020-10-17

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  3. 不死的小强 .net core 微服务 快速开发框架 Viper 限流

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  4. net core 微服务 快速开发框架

    dymDemo github 地址:https://github.com/duyanming/dymDemo dym 分布式开发框架 Demo 熔断 限流 事件总线(包括基于内存的.rabbitmq的 ...

  5. net core 微服务框架 Viper 调用链路追踪

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  6. hello world .net core 微服务框架 Viper

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  7. .NET Core微服务之基于Polly+AspectCore实现熔断与降级机制

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.熔断.降级与AOP 1.1 啥是熔断? 在广义的解释中,熔断主要是指为控制股票.期货或其他金融衍生产品的交易风险,为其单日价格波动幅度 ...

  8. .NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.预备知识:数据一致性 关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认 ...

  9. .NET Core微服务之开源项目CAP的初步使用

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CAP简介 下面的文字来自CAP的Wiki文档:https://github.com/dotnetcore/CAP/wiki CAP ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:Designer中属性设置界面的属性字体使用粗黑体的含义

    老猿Python博文目录 老猿Python博客地址 使用了好几个月的Designer,今天才发现属性编辑界面的属性名有的为粗而黑,有的则不是,如图: 稍微测试了一下,发现是对属性值进行过调整,不再是缺 ...

  2. 跨国合作:Serverless Components 在腾讯云的落地和实践

    导语 | Serverless Components 是 Serverless Framework 推出的最新解决⽅案,具有基础设施编排能⼒,开发者通过使⽤ Serverless Components ...

  3. AcWing 232. 守卫者的挑战

    题目链接 大型补档计划. 比较显然的dp 设 \(f[i][j][k]\) 为前 \(i\) 次,擂台上了 \(j\) 次,空闲容量(背包 - 使用的)为 \(k\) 的概率. 不上擂台的转移:\(f ...

  4. php curl的使用心得

    php的curl有很多参数,整理一下其中的常用参数的作用 1.CURLOPT_SSL_VERIFYHOST 设置为 1 是检查服务器SSL证书中是否存在一个公用名(common name).译者注:公 ...

  5. vue2中$emit $on $off实现组件之间的联动,绝对有你想了解的

    在vue2开发中,你肯定会遇到组件之间联动的问题,现在我们就来说说哪个神奇的指令可以满足我们的需求. 一.先上实例: 需求:点击A组件或者B组件可以使C组件的名称相应发生改变,同样,点击A组件也会使对 ...

  6. ant design 中实现表格头部可删除和添加

    我是用antd pro做一个项目.有一个小需求是表格头部栏可操作.具体是表头的每一项都带一个"x"按钮,当不想展示这一栏的时候,直接点"x",这一栏就不展示了. ...

  7. JavaSE25-Junit&注解

    1.Junit单元测试 1.1 测试分类 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. Junit使用:白盒测试 步骤: ...

  8. 微信小程序api拦截器

    微信小程序api拦截器 完美兼容原生小程序项目 完美兼用小程序api的原本调用方式,无痛迁移 小程序api全Promise化 和axios一样的请求方式 小程序api自定义拦截调用参数和返回结果 强大 ...

  9. mysql难题收录

    1.计算相邻两行的年龄的差距 表中的数据如下 select (s.age-(select age from stu where id - s.id = 1)) from stu as s; selec ...

  10. CVE-2019-0708_RDP漏洞利用

    可以说是2019年影响比较大的一个漏洞了, 简述下这个漏洞: Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如: windows2003.windows2008.w ...