一個輕量級的.Net Core微服務快速開發的輪子


   Adnc是一個輕量級的.Net Core微服務開發框架,同時也適用於單體架構系統的開發。支持經典三層與DDD架構開發模式、集成了一系列主流穩定的微服務配套技術棧。一個前后端分離的框架,前端基於Vue、后端基於.Net Core 3.1構建。Webapi遵循RESTful設計規范、基於JWT認證授權、基於Maxscale實現了讀寫分離、部署靈活、代碼簡潔、開箱即用、容器化微服務的最佳實踐。

  • 用戶中心:系統支撐服務,實現了用戶管理、角色管理、權限管理、菜單管理、組織架構管理
  • 運維中心:系統支撐服務,實現了登錄日志、審計日志、異常日志、字典管理、配置參數管理
  • 客戶中心:經典三層開發模式demo
  • 訂單中心:DDD開發模式demo
  • 倉儲中心:DDD開發模式demo

文檔

如何快速跑起來

如何手動部署到服務器

  • 詳細介紹如何使用docker安裝consul集群、使用consul注冊中心、安裝配置Skywalking,以及相關項目dockerfile文件編寫和配置等。
    請點擊鏈接,查看詳細介紹

如何實現讀寫分離

如何使用Cache Redis 分布式鎖 布隆過濾器

  • 詳細介紹如何使用Cache、Redis、分布式鎖以及布隆過濾器。如何配置Cache防止雪崩、擊穿、穿透以及緩存同步。
    請點擊鏈接,查看詳細介紹

如何動態分配雪花算法的WorkerId

如何使用EFCore倉儲

演示

問題交流

  • 780634162(QQ群)

GitHub

Roadmap

  • 開發微服務項目生成工具
  • 集成Dapr
  • 集成Quartz.Net實現框架計划調度功能。

目錄結構

  • src
    • clientApp 前端項目(Vue)
    • serverApi 后端項目(.NET Core 3.1)
  • doc 項目相關文檔(sql腳本、docker腳本、docker-compose.yaml文件)
  • tools 工具軟件
  • test 測試工程

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 
  • 界面
    .NET微服務開源框架-異常日志界面
    .NET微服務開源框架-角色管理界面

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擴展
Pomelo.EntityFrameworkCore.MySql EFCore ORM組件
Dapper 輕量級ORM組件
Z.EntityFramework.Plus.EFCore 第三方高性能的EfCore組件
NLog 日志記錄組件
AutoMapper 模型映射組件
Swashbuckle.AspNetCore APIs文檔生成工具(swagger)
StackExchange.Redis 開源的Redis客戶端SDK
CAP 實現事件總線及最終一致性(分布式事務)的一個開源的組件
RabbitMq 異步消息隊列組件
Polly 一個 .NET 彈性和瞬態故障處理庫,允許開發人員以 Fluent 和線程安全的方式來實現重試、斷路、超時、隔離和回退策略
FluentValidation 一個 .NET 驗證框架,支持鏈式操作,易於理解,功能完善,組件內提供十幾種常用驗證器,可擴展性好,支持自定義驗證器,支持本地化多語言
Maxscale Mariadb開發的一款成熟、高性能、免費開源的數據庫中間件

后端解決方案

整體架構圖

  • Infrastructures 基礎架構相關工程
  • Services 微服務相關工程
  • Tests 框架測試相關工程

.NET微服務開源框架-整體架構圖

Infrastructures基礎架構相關工程

01.Adnc.WebApi.Shared

該層實現了認證、鑒權、異常捕獲等公共類和中間件。所有微服務WebApi層的共享層,並且都需要依賴該層。

.NET微服務開源框架-webpai-shared層

02.Adnc.Application.Shared

該層定義了DTO對象的基類、Rpc服務通用服務、應用服務類基類以及操作日志攔截器。所有微服務Application層的共享層,並且都需要依賴該層。

.NET微服務開源框架-application-shared層

03.Adnc.Core.Shared

該層定義了Entity對象的基類、業務服務接口基類、UOW接口與攔截器、倉儲接口、以及處理本地事務與分布式事務。所有微服務Core層的共享層,並且都需要依賴該層。

.NET微服務開源框架-core-shared層

04.Adnc.Infra.Common

該層實現了一些通用幫助類。該層不依賴任何層。

.NET微服務開源框架-基礎機構-common層

10.Adnc.Infra.Gateway

該層是一個輸出項目,基於Ocelot實現的Api網關,如果項目采用整體結構開發,該項目可以直接刪除。ocelot網關包含路由、服務聚合、服務發現、認證、鑒權、限流、熔斷、緩存、Header頭傳遞等功能。市面上主流網關還有Kong,Traefik,Ambassador,Tyk等。

.NET微服務開源框架-基礎機構-gateway層

11.Adnc.Infra.HealthCheckUI

該層是一個輸出項目, AspNetCore.HealthChecks組件的Dashboard,直接配置需要監測的服務地址就可以了,沒有代碼,關鍵的代碼參考webapi層的AddHealthChecks()方法。

.NET微服務開源框架-基礎機構-healthchecksui層

20.Adnc.Infra.Consul

該層集成了Consul,提供服務的自動注冊、發現以及系統配置讀寫。

.NET微服務開源框架-基礎機構-cosnul層

21.Adnc.Infra.EasyCaching

該層集成了EasyCaching,負責一、二級緩存的管理,並重寫了EasyCaching攔截器部分代碼。

.NET微服務開源框架-基礎機構-easycaching層

22.Adnc.Infra.EfCore

該層負責Adnc.Core.Shared倉儲接口與Uow的EfCore的實現,負責mysql數據庫的操作。同時也集成了Dapper部分接口,用來處理復雜查詢。

.NET微服務開源框架-基礎機構-efcore層

23.Adnc.Infra.Mongo

該層負責Adnc.Core.Shared倉儲接口的Mongodb實現,負責mongodb數據庫的操作。

.NET微服務開源框架-基礎機構-mongodb層

23.Adnc.Infra.RabbitMq

該層集成了RabbitMq。封裝了發布者與訂閱者等公共類,方便更加便捷的調用rabbitmq。

.NET微服務開源框架-基礎機構-rabbitmq層

Services微服務相關工程

該層都是具體微服務業務的實現。

  • Adnc.Usr 用戶中心微服務,系統支撐服務,實現了用戶管理、角色管理、權限管理、菜單管理、組織架構管理。
  • Adnc.Maint 運維中心微服務,系統支撐服務,實現了登錄日志、審計日志、異常日志、字典管理、配置參數管理。
  • Adnc.Cus 客戶中心微服務,經典三層開發模式demo。
  • Adnc.Ord 訂單中心微服務,DDD開發模式demo。
  • Adnc.Whse 倉儲中心微服務,DDD開發模式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) }; } } 

問題交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM