zoukankan      html  css  js  c++  java
  • 一个轻量级的.Net Core/5.0微服务快速开发的轮子

    Adnc是一个微服务开发框架 代码改变世界 开源活跃社区

        Adnc是一个轻量级的.Net 5.0微服务开发框架,同时也适用于单体架构系统的开发。支持经典三层与DDD架构开发模式、集成了一系列主流稳定的微服务配套技术栈。一个前后端分离的框架,前端基于Vue、后端基于.Net 5.0构建。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 5.0)
    • 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 5.0搭建。
    • 后端主要技术栈
    名称 描述
    Ocelot 基于 .NET 5.0 编写的开源网关
    Consul 配置中心、注册中心组件
    Refit 一个声明式自动类型安全的RESTful服务调用组件,用于同步调用其他微服务
    SkyAPM.Agent.AspNetCore Skywalking .NET 5.0探针,性能链路监测组件
    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)
                };
            }
        }
    

    问题交流

    License

    MIT
    Free Software, Hell Yeah!

    我改变不了世界,代码也改变不了。
  • 相关阅读:
    数据库分库分表之后,你是如何解决事务问题?
    数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……
    2020年7月国产数据库排行:华为、腾讯发新品,中兴、阿里结硕果
    47%的MongoDB数据库遭黑客比特币勒索,你中招了吗?中招怎么办?
    数据库周刊30丨数据安全法草案将亮相;2020数据库产业报告;云南电网上线达梦;达梦7误删Redo Log;Oracle存储过程性能瓶颈;易鲸捷实践案例……
    数据库周刊29│2020数据库研究报告;Oracle取消今年技术大会;腾讯云DBbridge发布支持一键迁库;饿了么迁至阿里云;PG数组查询;Oracle被比特币勒索;DM8 安全管理…
    数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……
    怎么查看HBase表的创建时间
    Hadoop/HBase Kerberos认证失败:Clock skew too great
    java线程莫名异常退出时,如何捕获异常信息
  • 原文地址:https://www.cnblogs.com/alphayu/p/13832230.html
Copyright © 2011-2022 走看看