一个基于.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服务开发框架

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服务开发框架Github源代码地址https://github.com/PeyShine/Demo.MicroServer Apollo配置中心Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服务开发框架
Github源代码地址
https://github.com/PeyShine/Demo.MicroServer

Apollo配置中心
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 由于各个项目配置都需要读取基础的配置信息,这边在内网的Centos(101)上部署了Apollo的环境,并为项目添加了一些基础配置信息,配置如图
apollo

Consul
Consul是一种服务网格解决方案,提供具有服务发现,健康检查,Key/Value存储,多数据中心等功能。 在内网101启动Consul服务,这里为了测试,直接在本地将用户服务实例分别在三个端口启动起来,实际生产中这些服务可能部署在不同的机房不同的机器,他们之间组成一个服务的集群,服务提供一个心跳检测的方法,用于consul定时检测服务实例是否健康,启动时在consul中进行一次注册,这个就是经常说的‘服务注册与发现’中的服务注册,三个服务实例截图如下
serviceRsg
注册完成之后打开consul的ui界面可以看到,列表中存在多出一个用户服务的集群组名称:Demo.MicroServer.UserService,如图
consul_main
点击Demo.MicroServer.UserService进去之后如图,显示三个服务实例的信息
consul_service_instance_list
Swagger
Swagger提供了一个可视化的UI页面展示描述文件。接口的调用方、测试等都可以在该页面中对相关接口进行查阅和做一些简单的接口请求。当然Swagger的功能远不止这些,项目中已经在服务实例中接入swagger,如图
swagger_port_6891
swagger_port_6892
swagger_port_6893
因为三个服务实例是同样一份代码,所以可以看到打开三个端口的swagger地址,看到的接口信息完全一致。

Ocelot 网关
Ocelot是一个.NET API网关,它提供了路由,请求聚合,服务发现、鉴权、限流熔断、负载均衡器等一系列强大的功能,而这些功能只需要在配置文件中完成即可使用. 比如上面的swagger,我们在三个服务实例的端口打开都可以看到api相关文档信息,但是我们能否在api网关中直接集成呢,答案是肯定的,这依赖于ocelot强大的路由功能,如图,简单的几行配置,我们便将swagger配置到了网关当中
ocelot_config_swagger
网关内置的负载均衡器的使用,如图我在网关中对同一个接口进行了三次调用,可以看到结果分别来自三个不同的端口中,因为我选用了负载均衡器中的轮询策略
ocelot_LoadBalancer_6891
ocelot_LoadBalancer_6892
ocelot_LoadBalancer_6893

限流策略,当我们配置启用限流策略,并配置单位时间内访问次数限制时,然后快速刷新接口,超过设置的次数限制,那么可以看到按照错误提示出现
ocelot_RateLimit

Expectationless
Exceptionless 是一个开源的实时的日志收集框架,相信在微服务架构或者分布式应用应该都离不开一个统一的日志收集功能,Exceptionless就是就很好的提供了服务,相信有很多开发者都在使用ELK来完成日志的收集,这里说下Exceptionless底层也是基于ElasticSearch, Exceptionless提供了两种服务方式,一种是在线的,就是直接在官网注册账户,新建项目,官方会给每个项目分配一个appid,将id配置到项目中即可使用,当然,在线使用是有限制的,对日志收集数量(3000)还有存储时间天数(3天)都有限制,测试或者临时使用应该都没问题, 考虑到后面项目会在生产环境中使用,所以我在内网centos上搭建了一个本地化的Exceptionless环境来收集日志。 我这里调用一下swagger中写的一个异常收集测试的接口
swagger_exceptionless_collect
发送完成后,到Exceptionless的ui界面来查看收集情况
exceptionless_show
可以看到界面多出一条发送测试的数据记录

IdentityServer4统一鉴权中心
之所有将认证授权放在最后,因为没有这个前面的流程也是可以跑通的,测试的时候如果觉得这部分测试麻烦可以先注释掉,流程跑通后再来集成这个,这个东西的用法还是很多的,这里将IdentityServer4集成到api 网关当中来完成统一的认证鉴权。 在identityserver4项目中分别实现以下几个类
分类来完全几个东西:定义api资源,客户端访问资源范围,校验账户密码过程和数据返回格式 然后在api网关中项目中统一认证,这里需要说明下为什么要将IdentityServer4集成到网关当中而不是在每个服务实例单独去认证,想象一下,如果在一个大型项目中,不同的小组维护着不同的服务实例,势必每个小组都要在各自的代码中完成一套认证逻辑,确实没有必要, 而Ocelot天然对IdentityServer4进行了很好的集成,我们只需要在网关中统一添加认证代码即可,而各个微服务实例只需要关心各自的业务逻辑代码即可。 这个也列举一下使用过程,在客户端没有token时通过网关对api资源进行访问,可以看到如图的返回状态码:401
401
然后我们到IdentityServer4中请求一个token
identityserver4_token
拿到token后,带着token再通过网关请求相同的api资源,可以看到正确拿到想要的资源。
identityserver4_bearer_token

特别说明
上面的所有说明,在代码中均有体现,并开放出来,但是对于一个完整的微服务架构来说还是太简略,只是做了简单的说明,后续会具体拆开来分享一下。 至于为什么要这么做和工具的安装,博客园等地方有很多这方面的对比和教程可以参考,这里着重关注微服务架构的实现
欢迎大家提出宝贵意见,当然如果对你有帮助也欢迎star.

目录
相关文章
|
1月前
|
设计模式 开发框架 JavaScript
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
166 3
|
16天前
|
消息中间件 开发框架 监控
NET任务调度框架Hangfire使用指南
Hangfire 是一个用于 .NET 应用程序的开源任务调度框架,支持长时间运行任务、定时任务等。通过简单的安装配置,即可将任务从主线程分离,提升应用性能。支持多种数据库,提供丰富的任务类型如立即执行、延迟执行和周期性任务,并有可视化管理界面 Hangfire Dashboard。还支持安全性配置及扩展插件,如 Hangfire.HttpJob,适合各种复杂场景下的任务调度需求。
41 1
NET任务调度框架Hangfire使用指南
|
1月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
27 5
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
35 4
|
1月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
32 4
|
1月前
|
消息中间件 监控 数据可视化
基于.NET开源、功能强大且灵活的工作流引擎框架
基于.NET开源、功能强大且灵活的工作流引擎框架
|
1月前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
1月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
1月前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!