目录
引言:
.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集成,实现动态的服务发现和配置管理。
精彩链接
发表评论