目录

引言:

.NET CORE微服务之Ocelot

.NET CORE接入Ocelot

 1.创建一个名为NacosGateway的Asp.Net Core Api项目或者Asp.Net Core MVC项目

 2.引入nuget包

3.修改appsettings.json文件

4.Program代码

 5.在Nacos中写入Ocelot路由配置

6.运行服务和网关程序

Ocelot中的服务治理限流和熔断

 总结:

(衔接上一期.NET CORE服务接入Nacos--.NET CORE微服务之Nacos-CSDN博客)

引言:

微服务网关是在构建微服务架构时不可或缺的组件之一,它充当API请求的单一入口点,并负责路由、转换和处理进入系统中的所有请求。

首先,微服务网关的核心作用是提供统一的访问入口,所有对微服务的请求都通过这个入口进入系统。这有助于降低服务的受攻击面,并提供了统一的解决方案来处理跨域请求。

其次,微服务网关还承担着安全性和监控的重要职责。通过实施统一的权限认证支持,网关确保只有合法的请求才能访问微服务资源。此外,它还可以进行统一日志记录操作,便于监控和跟踪请求,从而提供对系统运行状态的实时反馈。

此外,为了防止系统过载,微服务网关提供了限流功能。通过限制每个客户端或服务的流量,可以避免因流量过大而导致的系统崩溃。同时,熔断机制可以在下游服务不可用时保护系统,避免雪崩效应的发生。

最后,微服务网关还内置了负载均衡器,可以帮助分配请求到不同的服务实例。这提高了系统的伸缩性和可靠性,确保了高可用性。

综上所述,微服务网关是微服务架构中不可或缺的组件之一。它不仅简化了微服务的部署和管理过程,还提供了额外的功能,如安全性和可伸缩性,以支持构建可靠的微服务架构。

 

.NET CORE微服务之Ocelot

 Ocelot是一个用于.NET Core的API网关,专为微服务架构设计。以下是关于Ocelot的一些详细介绍:

路由和请求聚合:Ocelot的核心功能之一是处理进入的HTTP请求,并根据配置将它们路由到相应的微服务上。它还能够聚合来自多个服务的响应,提供一个统一的响应给客户端。服务发现:Ocelot支持服务发现机制,能够自动检测并连接到注册的服务实例,这减少了手动配置每个服务的位置的需求。认证与鉴权:Ocelot提供了身份验证和权限检查的功能,确保只有合法的请求才能访问微服务资源。限流与熔断:为了防止系统过载,Ocelot提供了限流功能。此外,熔断机制可以在下游服务不可用时保护系统,避免雪崩效应的发生。负载均衡器:Ocelot内置了负载均衡器,可以帮助分配请求到不同的服务实例,提高系统的伸缩性和可靠性。集成能力:Ocelot能够与其他微服务平台如Service Fabric和Butterfly Tracing集成,提供更灵活的服务管理选项。配置文件:所有的这些功能可以通过一个简单的配置文件来配置和管理,这使得开发者可以快速地设置和调整API网关的行为而无需深入代码层面进行复杂的修改。版本建议:对于Ocelot的使用,建议使用.NET Core 2.1或更高的版本,因为3.0版本可能还不够稳定。

综上所述,Ocelot是一个功能强大且易于使用的API网关,适用于需要处理复杂路由和服务管理任务的微服务架构。通过使用Ocelot,开发者可以简化他们的微服务部署和管理过程,同时提供额外的功能,如安全性和可伸缩性。

.NET CORE接入Ocelot

 1.创建一个名为NacosGateway的Asp.Net Core Api项目或者Asp.Net Core MVC项目

 2.引入nuget包

 

3.修改appsettings.json文件

{

"Logging": {

"LogLevel": {

"Default": "Information",

"Microsoft.AspNetCore": "Warning"

}

},

"AllowedHosts": "*",

"NacosConfig": {

"Listeners": [

{

"Optional": false,

"DataId": "NacosServiceA",

"Group": "DEFAULT_GROUP"

}

],

"Optional": false,

"Namespace": "NacosServiceA",

"ServerAddresses": [ "http://192.168.157.157:8848/" ]

}

}

4.Program代码

using Ocelot.DependencyInjection;

using Ocelot.Middleware;

using Ocelot.Provider.Nacos;

namespace NacosGateway

{

public class Program

{

public static void Main(string[] args)

{

var builder = WebApplication.CreateBuilder(args);

// 添加Ocelot对应Nacos扩展

builder.Services.AddOcelot().AddNacosDiscovery();

// 添加配置中心

builder.Configuration.AddNacosV2Configuration(builder.Configuration.GetSection("NacosConfig"));

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();

builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())

{

app.UseSwagger();

app.UseSwaggerUI();

}

app.UseOcelot().Wait();

app.MapControllers();

app.Run();

}

}

}

 5.在Nacos中写入Ocelot路由配置

{

"Routes": [

{

//上游请求模板地址

"UpstreamPathTemplate": "/{url}",

//上游请求方法

"UpstreamHttpMethod": [ "Get", "Post" ],

//下游转发模板地址

"DownstreamPathTemplate": "/{url}",

"DownstreamScheme": "http",

"UseServiceDiscovery": true,

//服务名称

"ServiceName": "ServiceA",

//配置负载均衡

"LoadBalancerOptions": {

//负载均衡方式

"Type": "LeastConnection"

}

}

],

"GlobalConfiguration": {

"ServiceDiscoveryProvider": {

"Type": "Nacos"

}

},

"nacos": {

"ServerAddresses": [ "http://192.168.157.157:8848" ],

"DefaultTimeOut": 15000,

"Namespace": "NacosServiceA",

"ListenInterval": 1000,

"ServiceName": "NacosGateway",

"GroupName": "DEFAULT_GROUP",

"ClusterName": "DEFAULT",

"RegisterEnabled": true,

"InstanceEnabled": true,

"Ephemeral": true,

"ConfigUseRpc": true,

"NamingUseRpc": true,

"LBStrategy": "WeightRoundRobin"

}

}

6.运行服务和网关程序

 此时我们可以看到,网关和服务均已运行。并成功注册到Nacos中。 

直接点击swagger界面中的 test api 运行。

  

打开一个新的浏览器界面,在地址栏中输入 127.0.0.1:5263/test/testa ,此时可以看到Ocelot路由已经把请求成功转发至服务中并返回结果。

Ocelot中的服务治理限流和熔断

限流:限流是为了防止系统因过载而崩溃,确保系统的稳定性。在Ocelot中,限流通常是通过设置某些阈值来控制请求的速率,从而避免超出服务的承载能力。这不仅可以预防服务宕机,也有助于抵御爬虫和DDoS攻击。熔断:熔断机制的目的是停止将请求转发到下游服务,特别是在下游服务已经出现故障时。这样做可以减少无谓的请求,防止增加下游服务器和API网关的负担,从而在一定程度上维护系统的整体可用性。

引入Polly nuget包 

 在配置文件中添加治理规则

//限流

"RateLimitOptions": {

"ClientWhitelist": [], //设置白名单:http请求传header,ClientId区分大小写,白名单不受限流

"EnableRateLimiting": true, //开启,默认true

"Period": "5m", //1s, 5m, 1h, 1d//用于限流计算: 在Period时间内最多允许Limit次请求(支持的格式有秒:s,分钟:m,小时:h,天:d 等

"PeriodTimespan": 30, //多少秒之后客户端可以重试

"Limit": 5 //统计时间段内允许的最大请求数量

//简述上面限流条件:5分钟之内最多请求5次,失败了(超出五次也算),30秒之后客户端才可以重新请求

},

//熔断

"QoSOptions": {

"ExceptionsAllowedBeforeBreaking": 3, //阈值,当转发到下游的服务连续出现的异常次数达到阈值就会触发熔断。必须和DurationOfBreak一起设置。

"DurationOfBreak": 10000, //熔断持续时间,单位毫秒。必须和ExceptionsAllowedBeforeBreaking一起设置。

//超时设置

"TimeoutValue": 5000 //限定时间内未响应的请求直接超时,单位毫秒。可以单独设置。ocelot默认超时时间是90秒

},

总结:

Ocelot是一个基于.NET Core的API网关,可以用于连接Nacos作为服务发现和配置中心。通过使用Ocelot,可以实现微服务的路由、负载均衡、认证等功能,并且可以轻松地与Nacos集成,实现动态的服务发现和配置管理。

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。