.Net Core微服务——Ocelot(2):集成Consul
有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力。而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略,灵活性更强。
(建议看完前一篇文章再来实践这一篇,不然可能有难度)
上干货。
首先打开上一篇新建好的项目,继续添加nuget包:
然后注册相关服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot()
.AddConsul()
.AddConfigStoredInConsul();
}
接下来还需要修改下配置文件:
{
"Routes": [
{
"DownstreamPathTemplate": "/{url}",
"DownstreamScheme": "http",
//"DownstreamHostAndPorts": [
// {
// "Host": "123.123.123.123",
// "Port": 5050
// }
//],
"UpstreamPathTemplate": "/MJ/{url}",
"UpstreamHttpMethod": [ "Get", "Post" ],
"ServiceName": "study_consul",
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
}
],
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Host": "42.193.182.64",
"Port": 88
}
}
}
注释部分是原先常规的转发规则,变色部分是集成consul以后新增的配置。
这里说下配置项LoadBalancerOptions(负载均衡),官方实现了4个负载均衡器,分别是:
1、LeastConnection - 跟踪哪些服务正在处理请求,并向现有请求最少的服务发送新请求。
2、RoundRobin - 轮询。
3、NoLoadBalancer - 从配置或服务发现中获取第一个可用服务。
4、CookieStickySessions - 使用 cookie 将所有请求粘贴到特定服务器。
如果选择了第四个,那么需要额外的参数来描述cookie,比如:
"LoadBalancerOptions": {
"Type": "CookieStickySessions",
"Key": "ASP.NET_SessionId",
"Expiry": 1800000 //过期时间
},
关于负载均衡器,本文不多做详解,回到主题。
consul需要单独搭建,所以我准备了一个拥有6个节点的consul集群:
然后在集群下注册了3个服务:
这时运行网关并请求,网关会把请求自动转到远程的consul,并且在已有的consul服务中轮询调用。来看一下运行结果:
多刷新几下:
如果你得到了类似的结果,恭喜你,已经完成了集成的操作。同时,还可以解锁一个新操作:热更新。
热更新
打开consul控制面板,找到Key/Value,你会发现这里多了一个键值对:
进入查看会发现,这是ocelot的配置:
这一份配置文件里包含了当前版本的ocelot支持的所有配置项,并且修改后即时生效。
改个路由证明下:
原来:"UpstreamPathTemplate": "/MJ/{url}"
现在:"UpstreamPathTemplate": "/{url}"
save以后再请求:
这感觉,酸爽。
既然是搞技术,自然不能脱离实际。上面的consul集群、consul客户端、网关程序都部署在不同的阿里云服务器上,和生产环境一样。学习的话,部署到本机也可以,consul单机也可以。如果你没有consul基础或者理解的不清晰,可以看我之前的系列文章,应该有帮助,往前翻一翻就有。友情提醒一下,单体的ocelot、consul禁止上生产,太脆弱,一挂全完。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2016-11-08 .Net——基于SuperSocket实现的WebSocket(前端)
2016-11-08 .Net——基于SuperSocket实现的WebSocket(后端)