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!