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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 集成.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.

目录
相关文章
|
16天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
17天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
23 0
|
1月前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
1月前
|
监控 Kubernetes 持续交付
构建高效可扩展的微服务架构:后端开发实践指南
在数字化转型的浪潮中,企业对软件系统的要求日益提高,追求快速响应市场变化、持续交付价值成为核心竞争力。微服务架构以其灵活性、模块化和独立部署的特点,成为解决复杂系统问题的有效途径。本文将深入探讨如何构建一个高效且可扩展的微服务架构,涵盖关键设计原则、技术选型及实践案例,为后端开发者提供一条清晰的指导路线,帮助其在不断变化的技术环境中保持竞争力。
131 3
|
5天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
26天前
|
监控 Java 开发者
构建高效微服务架构:后端开发的新范式
在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为企业技术战略的关键组成部分。本文深入探讨了微服务的核心概念,包括其设计原则、技术栈选择以及与容器化和编排技术的融合。通过实际案例分析,展示了如何利用微服务架构提升系统性能,实现快速迭代部署,并通过服务的解耦来提高整体系统的可靠性。
|
1月前
|
监控 数据管理 API
构建高效微服务架构:后端开发的新趋势
在现代软件开发领域,随着业务需求的不断复杂化以及敏捷迭代的加速,传统的单体应用架构逐渐暴露出其局限性。微服务架构作为一种新的解决方案,以其高度模块化、独立部署和可扩展性,正成为后端开发领域的新趋势。本文将探讨微服务架构的核心概念,分析其优势与面临的挑战,并提供实施高效微服务的策略和最佳实践,帮助读者理解如何利用这一架构模式提升系统的可靠性、灵活性和可维护性。
137 5
|
1月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
1天前
|
持续交付 API 开发者
构建高效微服务架构:后端开发的新范式
【4月更文挑战第24天】 随着现代软件系统的复杂性日益增加,传统的单体应用已难以满足快速迭代与灵活扩展的需求。微服务架构作为一种新兴的软件开发模式,以其服务的细粒度、独立部署和弹性伸缩等优势,正在逐渐成为后端开发的重要趋势。本文将深入探讨微服务架构的设计原则、关键技术以及在实际业务中的应用实践,旨在为后端开发者提供构建和维护高效微服务架构的参考指南。
|
2天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。