ASP.NET 微服务网关 Ocelot+Consul+Skywalking

ASP.NET 微服务网关 Ocelot+Consul+Skywalking

  • APIGateWaySample
    • 简介
      • 网关
      • 相关技术
          • 核心
          • 其它
    • 请求处理流程
    • 环境搭建
    • 代码
    • 运行效果图

APIGateWaySample

Ocelot + Consul + Skywalking

简介

系统设计图
System Design Diagram

网关

API网关(Gateway)是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、限流等。

相关技术

核心
  • Ocelot:轻量级的.NET API网关
  • Consul:服务发现和配置管理
  • Skywalking:分布式系统的APM(应用性能监控)工具
其它
  • Serilog:日志。网关使用Serilog,将结构化的日志信息存储到ES(Elastic Search),便于分析处理。
  • Elasticsearch:是一个分布式、RESTful风格的搜索和分析引擎,具有以下特点:
    • 分布式实时文件存储,每个字段都被索引并可被搜索
    • 分布式实时分析搜索引擎
    • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
    • 在本项目中主要用于存储和分析系统日志数据

请求处理流程

  • 用户请求API网关,网关根据Ocelot配置,处理和转发到下游服务(Service1,Service2…)。
  • 各个服务注册到Consul,API网关通过服务发现的方式,向Consul请求下游服务的信息,从来实现转发。
  • 网关等所有服务,集成到Skywalking,通过Skywalking监控应用的性能,包括调用链路,响应时间,异常等。

环境搭建

ES: 默认端口 9200
ES Head: 默认端口 9100
Skywalking: WEB默认端口 9091
Consul: 默认端口8500,设置好环境变量后,本地开发模式启动命令:consul agent -dev -node=127.0.0.1

代码

包:

  • Ocelot 23.4.3:网关组件
    ocelot.json
{"Routes": [{"UseServiceDiscovery": true,"DownstreamPathTemplate": "/{abc}","DownstreamScheme": "http","ServiceName": "service1","LoadBalancerOptions": { "Type": "RoundRobin" },"UpstreamPathTemplate": "/service1/{abc}","UpstreamHttpMethod": [ "Get", "Post" ],"ReRoutesCaseSensitive": false}],"GlobalConfiguration": {"BaseUrl": "http://localhost:8000","ServiceDiscoveryProvider": {"Scheme": "http","Host": "localhost","Port": 8500,"Type": "Consul","ConfigurationKey": "node-1"},"Logging": {"LogLevel": {"Default": "Trace"}}}
}
  • Ocelot.Provider.Consul 23.4.3:Consul服务发现,使网关可以通过Consul服务发现下游服务,从而正确转发请求
  • Consul 1.7.14.7:服务注册,将网关服务注册到Consul
  • SkyAPM.Agent.AspNetCore 2.2.0:集成到Skywalking
    skyapm.json
{"SkyWalking": {"ServiceName": "api-gateway","Namespace": "","HeaderVersions": ["sw8"],"Sampling": {"SamplePer3Secs": -1,"Percentage": -1.0},"Logging": {"Level": "Information","FilePath": "logs\\skyapm-{Date}.log"},"Transport": {"Interval": 3000,"ProtocolVersion": "v8","QueueSize": 30000,"BatchSize": 3000,"gRPC": {"Servers": "127.0.0.1:11800","Timeout": 10000,"ConnectTimeout": 10000,"ReportTimeout": 600000,"Authentication": ""}}}
}

Program.cs引入配置文件

builder.Configuration.AddJsonFile("ocelot.json").AddJsonFile($"ocelot.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);
builder.Configuration.AddJsonFile("skyapm.json").AddJsonFile($"skyapm.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);
builder.Configuration.AddJsonFile("serilog.json").AddJsonFile($"serilog.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);
builder.Configuration.AddJsonFile("consul.json").AddJsonFile($"consul.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);

使用网关和服务发现

builder.Services.AddOcelot().AddConsul(); //Consul 服务发现
builder.Services.AddHealthChecks();
...
await app.UseOcelot();

使用skywalking

builder.Services.AddSkyApmExtensions();

运行效果图

Consul service list
Consul service detail
Skywalking request trace

源码: gitee地址 git地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

频谱分析仪的使用

频谱分析仪设置带宽的方式: 可以利用同轴线缆来制作近场探头: 区别dB和dBm两个单位: 无线电波的发射功率是指在给定频段范围内的能量,通常有两种衡量 或测量标准:   1、功率(W):相…

【数据分析】转录组基因表达的KEGG通路富集分析教程

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍差异分析(limma)KEGG富集分析(enrichKEGG)可视化加载R包数据下载导入数据基因差异分析火山图KEGG通路富集分析可视化通路结果另一个案例总结系统信息参考介绍 KEGG富集分析,可…

关于sqlalchemy的使用

关于sqlalchemy的使用 说明一、sqlachemy总体使用思路二、安装与创建库、连结库三、创建表、增加数据四、查询记录五、更新或删除六、关联表定义 说明 本教程所需软件及库python3.10、sqlalchemy安装与创建库、连结库创建表、增加数据查询记录 一、sqlachemy总体使用思路 在…

在 IntelliJ IDEA 中使用 JUnit 进行单元测试

1. 介绍 JUnit JUnit 是 Java 语言中最流行的单元测试框架之一。它基于 xUnit 设计模式,支持 测试自动化、断言(Assertions)和测试生命周期管理,是 Java 开发中进行 TDD(测试驱动开发) 的重要工具。 JUni…

单片机的发展

一、引言 单片机自诞生以来,经历了四十多年的风风雨雨,从最初的工业控制逐步扩展到家电、通信、智能家居等各个领域。其发展过程就像是一场精彩的冒险,每一次技术的革新都像是在未知的海域中开辟新的航线。 二、单片机的发展历程 &#xff…

常见的博弈模型有哪些

常见的博弈模型有哪些 目录 常见的博弈模型有哪些**1. 重复博弈(Repeated Game)****2. 进化博弈论(Evolutionary Game Theory)****3. 机制设计(Mechanism Design)****4. 微分博弈(Differential Game)****5. 贝叶斯博弈(Bayesian Game)****6. 合作博弈(Cooperative G…

【MySQL-数据类型】数据类型分类+数值类型+文本、二进制类型+String类型

一、数据类型分类 二、数值类型 1.bit类型 测试环境ubuntu 基本语法: bit[(M)]:位字段类型,M表示每个值的位数,范围从1~64;如果M被忽略,默认为1举例: create table testBit(id i…

golang从入门到做牛马:第一篇-我与golang的缘分,go语言简介

还记得2018年的夏天,刚毕业的我不知道该做些什么,于是自学了一周的go语言,想要找一份go语言工作的代码,当时的go还没有go mod来管理依赖包,在北京找了一个月的工作,找到了一个小公司做了后端开发,当然使用go语言开发,带着兴奋劲,年轻身体也好,边努力学习,边工作。 时…

【数据库】MySQL常见聚合查询详解

在数据库操作中,聚合查询是非常重要的一部分。通过聚合查询,我们可以对数据进行汇总、统计和分析。MySQL提供了丰富的聚合函数来满足不同的需求。本文将详细介绍MySQL中常见的40个聚合函数及其使用场景,并通过8个的案例展示它们的用法。 一、…

调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目录 调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder(知识库变体)4.2 FastGPT(…

【Vue CLI脚手架开发】——6.scoped样式

文章目录 一、scoped是什么二、应用案例1.使用代码2.原理3父组件App未添加scoped影响 一、scoped是什么 我们知道vue为了防止css样式污染&#xff0c;在每个组件中提供了 scoped属性进行限定css作用域&#xff1b;当<style>标签有 scoped 属性时&#xff0c;它的 CSS 只…

高精算法的用法及其优势

高精度问题是指当数据的位数非常大&#xff08;超出标准数据类型的范围&#xff09;时&#xff0c;如何进行计算和存储的问题。常见场景包括大整数的加、减、乘、除、取模等操作。以下是解决高精度问题的常用方法与技巧&#xff1a; 一、数据存储 数组存储 用整型数组存储&am…

VM+CentOS虚拟机

关于VMCentOS虚拟机的配置和使用&#xff0c;可以参考以下博客中的详细教程&#xff1a; **一、VMCentOS虚拟机配置** 1. **虚拟机网络配置** - 在VMware中&#xff0c;点击“编辑”→“虚拟网络编辑器”&#xff0c;选择VMnet8并进行相关设置。 - 子网IP可以改成如192.168.1…

设置 CursorRules 规则

为什么要设置CursorRules&#xff1f; 设置 CursorRules 可以帮助优化代码生成和开发流程&#xff0c;提升工作效率。具体的好处包括&#xff1a; 1、自动化代码生成 &#xff1a;通过定义规则&#xff0c;Cursor 可以根据你的开发需求自动生成符合规定的代码模板&#xff0c…

pip install速度太慢的多种解决方案

目录 问题描述为什么 pip 速度这么慢&#xff1f;解决方案1. 使用国内镜像源2. 配置多个镜像源3. 使用第三方工具4. 手动下载后本地安装5. 优化网络环境6. 更新 pip 版本 测试效果 问题描述 在使用 Python 进行开发时&#xff0c;我们经常需要使用 pip 来安装第三方库。然而&am…

Java阻塞队列深度解析:高并发场景下的安全卫士

一、阻塞队列的核心价值 在电商秒杀系统中&#xff0c;瞬时涌入的10万请求如果直接冲击数据库&#xff0c;必然导致系统崩溃。阻塞队列如同一个智能缓冲带&#xff0c;通过流量削峰和异步解耦两大核心能力&#xff0c;成为高并发系统的核心组件。 二、Java阻塞队列实现类对比 …

基于RapidOCR与DeepSeek的智能表格转换技术实践

基于RapidOCR与DeepSeek的智能表格转换技术实践 一、技术背景与需求场景 在金融分析、数据报表处理等领域&#xff0c;存在大量图片格式的表格数据需要结构化处理。本文介绍基于开源RapidOCR表格识别与DeepSeek大模型的智能转换方案&#xff0c;实现以下典型场景&#xff1a; …

django中视图作用和视图功能 以及用法

在 Django REST Framework(DRF)中,视图(View)是处理 HTTP 请求并返回响应的核心组件。DRF 提供了多种视图类,适用于不同的场景和需求。以下是 DRF 中常见的视图类及其作用、使用方法的详细说明: 一、DRF 视图的分类 DRF 的视图可以分为以下几类: 基于函数的视图(Func…

希音(Shein)前端开发面试题集锦和参考答案

用 Node 写过什么工具或 npm 包 在实际开发中,使用 Node 编写过多种实用工具和 npm 包。 自动化构建工具 开发了一个简单的自动化构建工具,用于处理前端项目的资源压缩和合并。在前端项目中,为了优化性能,需要对 CSS 和 JavaScript 文件进行压缩,减少文件体积,同时将多个…

C语言100天练习题【记录本】

C语言经典100题&#xff08;手把手 编程&#xff09; 可以在哔哩哔哩找到 已解决的天数&#xff1a;一&#xff0c;二&#xff0c;五&#xff0c;六 下面的都是模模糊糊的 可以学学这些算法&#xff0c;我是算法白痴&#xff0c;但是我不是白痴&#xff0c;可以学&#xff…