<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4640字,需瀏覽 10分鐘

           ·

          2020-10-30 06:22


          前言

          ????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.AspNetCoreskywalking .net core 探針,性能檢測組件
          AspNetCore.HealthChecks健康檢測組件
          AutofacIOC容器組件
          Autofac.Extras.DynamicProxyAutfac AOP擴(kuò)展
          EfcoreORM組件
          Dapper輕量級ORM組件
          Z.EntityFramework.Plus.EFCore高新能的EfCore組件
          NLog日志記錄組件件
          AutoMapper模型映射組件
          Swashbuckle.AspNetCoreREST 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)選擇看這篇就夠了

          10個小技巧助您寫出高性能的ASP.NET Core代碼

          用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)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點建議

          C#異步編程看這篇就夠了


          瀏覽 92
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香蕉视频911 | 美女高潮视频免费在线观看 | A∨日本精品免费 | 国产精品人人人人 | 亚洲精品乱码久久久久久久久久久久 |