




















如果你想找一套既能跑起来、又方便继续扩展,还适合拿来学习的 .NET 微服务基础工程,ADNC 会是一个不错的参考。仓库里既有可复用的基础设施(Adnc.Infra.* / Adnc.Shared.*),也有完整的 Demo 和配套 Wiki 文档,能帮助你从“先看懂”一步步走到“自己动手改”。
本文会尽量用通俗的话,带你快速了解这个仓库里有什么、它主要解决什么问题,以及推荐的阅读和上手顺序。
ADNC 是一个基于 .NET 8 的开源分布式/微服务框架,也可以用于单体项目。它主要围绕这些能力展开:
它提供了一套可以直接落地的工程结构和基础设施集成(见 README_ZH.md)。
仓库主体都在 src 下(详见 README_ZH.md):
src/Infrastructures:基础设施集成,比如 EFCore、Dapper、Redis、IdGenerator、Consul、EventBus、缓存等。src/ServiceShared:服务通用层,比如 Api 启动封装、远程调用封装、认证/鉴权封装、依赖注入封装、通用中间件等。src/Gateways:网关(Ocelot)。src/Demo:可运行的示例微服务,用来展示不同的服务组织方式。src/.editorconfig:用于统一代码风格的跨编辑器配置文件,确保团队中无论谁用 VS、VS Code 还是 JetBrains Rider,写出的代码格式都是一致的src/Directory.Build.props:用于管理通用构建属性(如目标框架、语言版本、输出路径等)src/Directory.Packages.props:用于中央包管理 (CPM),统一管理整个解决方案中 NuGet 包的版本号Demo 不只是“能跑的样例”,更重要的是它在演示:同一套基础设施和规范下,服务可以按不同复杂度来组织代码(详见 README_ZH.md):
这能帮你在真实项目里做取舍:不是所有服务都必须 DDD,也不是所有服务都适合堆在一个工程里。
下面是一条常见链路。本地用 Direct 模式也成立,换成 Consul/CoreDns 只是“怎么找到下游地址”不同:
src/Gateways/Ocelot)。src/Demo/*/Api)。ServiceShared 复用。docs/wiki/service-http-call-zh.mddocs/wiki/service-grpc-call-zh.mddocs/wiki/service-event-call-zh.md你可以把 ADNC 理解为:把每个服务里都会重复写的那堆胶水代码,集中沉淀到 Infrastructures/ServiceShared,让业务代码更专注于业务本身。
用于“加载配置”。支持本地文件和 Consul KV(详见 docs/wiki/config-center-zh.md):
File:加载运行目录下的 shared appsettingsConsul:从 Consul KV 加载,默认会轮询刷新,并替换 $SERVICENAME/$SHORTNAME/$RELATIVEROOTPATH 这些占位符用于“服务注册与发现”。支持 Direct/Consul/CoreDns(配置说明见 docs/wiki/appsettings-zh.md,使用介绍见 docs/wiki/registry-center-zh.md):
Direct:开发时最直观,直接写死 URLConsul:服务启动时注册,调用时按服务名发现实例CoreDns:K8S 场景下使用集群内域名建议的使用原则很简单,也最实用:
docs/wiki/service-http-call-zh.mddocs/wiki/service-grpc-call-zh.mddocs/wiki/service-event-call-zh.mdADNC 在“服务互调”场景下提供了更工程化的做法:既支持 Basic,也支持 Bearer 透传,减少业务代码对 Token 处理的重复劳动(见 docs/wiki/claims-based-authentication-zh.md)。
缓存相关能力(包括防雪崩、击穿、穿透这些常见问题的处理方式)集中在一篇文档里,适合直接照着落地(见 docs/wiki/cache-redis-distributedlock-bloomfilter-zh.md)。
仓储、工作单元、本地事务/分布式事务、原生 SQL 等,都有对应的 Demo 和文档(可以先从 docs/wiki/efcore-*.md 系列开始)。
在微服务里,“能看见、好排查”往往比“能写代码”更重要。ADNC 已经把很多基础能力做成统一接入点:
docs/wiki/skyapm-tracing-zh.md。docs/wiki/appsettings-zh.md 的 Logging 节点开始理解)。如果你只想先“跑起来看看”,按 docs/wiki/quickstart-zh.md 的顺序就可以。核心就三件事:
src/Demo/Shared/resources/appsettings.shared.Development.json(Redis、RabbitMQ 等)。src/Demo/*/Api/appsettings.Development.json(数据库连接串、端口等)。doc/dbsql/adnc.sql(一次性导入)。启动项目时,建议先从这 4 个开始:
Adnc.Gateway.OcelotAdnc.Demo.Admin.ApiAdnc.Demo.Maint.ApiAdnc.Demo.Cust.Api如果你希望“看懂之后能改,改了之后还能稳”,建议按这个顺序读:
docs/wiki/quickstart-zh.md:先跑起来docs/wiki/appsettings-zh.md:弄清楚关键配置节点docs/wiki/config-center-zh.md:配置中心(如果你有多环境/统一下发的需求)docs/wiki/registry-center-zh.md:注册中心(如果你要做真实的服务发现和负载均衡)docs/wiki/service-http-call-zh.md / docs/wiki/service-grpc-call-zh.md:同步调用怎么写、鉴权怎么带、地址怎么配docs/wiki/service-event-call-zh.md:事件驱动怎么做幂等、怎么处理事务与重试docs/wiki/feature-dev-guide-zh.md + docs/wiki/api-dev-guide-zh.md + docs/wiki/service-dev-guide.md:跟着规范新增一个 CRUDdocs/wiki/skyapm-tracing-zh.mddocs/wiki/quickly-docker-deploy-zh.mdADNC 的价值不只在于“封装了多少功能”,更在于它把一套微服务工程里常见的问题,用可运行的 Demo + 可阅读的文档 + 可复用的基础设施代码串了起来。
你可以:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。