一個輕量級的.Net Core微服務(wù)快速開發(fā)的輪子

前言
????Adnc是一個基于.Net Core前后端分離的輕量級微服務(wù)(microservices)快速開發(fā)框架,同時也可以應(yīng)用于單體架構(gòu)系統(tǒng)的開發(fā)。框架基于JWT認(rèn)證授權(quán),包含基礎(chǔ)的后臺管理功能,代碼簡潔、易上手、學(xué)習(xí)成本低、開箱即用。
????Adnc對配置、依賴注入、日志、緩存、模型映射、認(rèn)證/授權(quán)、倉儲、服務(wù)注冊/發(fā)現(xiàn)、健康檢測、性能檢測、Mq、Ef等模塊進(jìn)行更高一級的自動化封裝,并規(guī)范了一套業(yè)務(wù)實現(xiàn)的代碼規(guī)范與操作流程,使Asp.NetCore 框架更易于應(yīng)用到實際項目開發(fā)中。
github:https://github.com/AlphaYu/Adnc
演示網(wǎng)址:http://193.112.75.77 alpha2008/alpha2008
目錄結(jié)構(gòu)
clientApp 前端項目(vue)
serverApi 后端項目(dotnetcore)
doc 項目相關(guān)文檔(數(shù)據(jù)庫腳本/docker-compose.yaml文件)
tools 工具軟件

ClientApp
ClientApp基于Vue-element-adminy以及web-flash搭建,感謝兩位作者。
技術(shù)棧 Vue + Vue-Router + Vuex + Axios
構(gòu)建步驟
# 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基于dotnetcore3.1搭建。
主要技術(shù)棧
| 名稱 | 描述 |
|---|---|
| Ocelot | 基于 dotnetcore 編寫的開源Api網(wǎng)關(guān) |
| Consul | 配置中心、服務(wù)發(fā)現(xiàn)/注冊組件 |
| Refit | 一個聲明式自動類型安全的restful服務(wù)調(diào)用組件 |
| SkyAPM.Agent.AspNetCore | skywalking .net core 探針,性能檢測組件 |
| AspNetCore.HealthChecks | 健康檢測組件 |
| Autofac | IOC容器組件 |
| Autofac.Extras.DynamicProxy | Autfac AOP擴(kuò)展 |
| Efcore | ORM組件 |
| Dapper | 輕量級ORM組件 |
| Z.EntityFramework.Plus.EFCore | 高新能的EfCore組件 |
| NLog | 日志記錄組件件 |
| AutoMapper | 模型映射組件 |
| Swashbuckle.AspNetCore | REST APIs文檔生成工具(swagger) |
| EasyCaching | 實現(xiàn)一、二級緩存管理的一個開源的組件 |
| CAP | 實現(xiàn)事件總線及最終一致性(分布式事務(wù))的一個開源的組件 |
| RabbitMq | 異步消息隊列組件 |
項目介紹
Adnc.Infras 基礎(chǔ)架構(gòu)層
01.Adnc.WebApi.Shared
該層定義認(rèn)證、鑒權(quán)、異常捕獲等公共類與中間件。所有微服務(wù)WebApi層的共享層,都需要依賴該層。
02.Adnc.Application.Shared
該層定義了DTO對象的基類、應(yīng)用服務(wù)類基類以及操作日志攔截器。所有微服務(wù)Application層的共享層,都需要依賴該層。
03.Adnc.Core.Shared
該層定義了Entity對象的基類、業(yè)務(wù)服務(wù)接口基類、Rpc服務(wù)通用服務(wù)、UOW接口與攔截器以及倉儲接口。所有微服務(wù)Core層的共享層,都需要依賴該層。
04.Adnc.Common
該層定義了一些公用模型與常量以及一些通用幫助類。該層不依賴任何層。
10.Adnc.Infr.Gateway
該層是一個輸出項目,Api網(wǎng)關(guān),基于ocelot實現(xiàn),如果項目采用整體結(jié)構(gòu)開發(fā),該項目可以直接刪除。ocelot網(wǎng)關(guān)包含路由、服務(wù)聚合、服務(wù)發(fā)現(xiàn)、認(rèn)證、鑒權(quán)、限流、熔斷、緩存、Header頭傳遞等功能。市面上主流網(wǎng)關(guān)還有Kong,Traefik,Ambassador,Tyk等。
11.Adnc.Infr.HealthCheckUI
該層是一個輸出項目, AspNetCore.HealthChecks組件的Dashboard,直接配置需要監(jiān)測的服務(wù)地址就可以了,沒有代碼。
20.Adnc.Infr.Consul
該層集成了Consul。提供服務(wù)的注冊、發(fā)現(xiàn)以及系統(tǒng)配置讀取等公共類。
21.Adnc.Infr.EasyCaching
該層集成了EasyCaching。重寫了EasyCaching攔截器部分代碼,負(fù)責(zé)一、二級緩存的管理。
22.Adnc.Infr.EfCore
該層負(fù)責(zé)Adnc.Core.Shared倉儲接口與Uow的Ef實現(xiàn),負(fù)責(zé)mysql數(shù)據(jù)庫的操作。同時也集成了Dapper部分接口,用來處理復(fù)雜查詢。
23.Adnc.Infr.Mongo
該層負(fù)責(zé)Adnc.Core.Shared倉儲接口的Mongodb實現(xiàn),負(fù)責(zé)mongodb數(shù)據(jù)庫的操作。
23.Adnc.Infr.RabbitMq
該層集成了RabbitMq。封裝了發(fā)布者與訂閱者等公共類。
代碼片段
[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 Task 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 _userRepo;
private readonly RabbitMqProducer _mqProducer;
public AccountAppService(IMapper mapper,
IEfRepository userRepo,
RabbitMqProducer mqProducer)
{
_mapper = mapper;
_userRepo = userRepo;
_mqProducer = mqProducer;
}
public async Task 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(user);
}
}
問題交流
企?鵝?群:780634162
博????客:https://www.cnblogs.com/alphayu
github? :https://github.com/alphayu
項目網(wǎng)址:https://www.aspdotnetcore.net
License
MIT
Free Software, Hell Yeah!
【推薦】.NET Core開發(fā)實戰(zhàn)視頻課程?★★★
.NET Core實戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃
【.NET Core微服務(wù)實戰(zhàn)-統(tǒng)一身份認(rèn)證】開篇及目錄索引
Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)
.NET Core中的一個接口多種實現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了
用abp vNext快速開發(fā)Quartz.NET定時任務(wù)管理界面
在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實現(xiàn)作業(yè)調(diào)度
現(xiàn)身說法:實際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化
