.NET CORE2.2 下 Ocelot+Consul服务发现踩坑记录

历史原因,笔者所在公司的项目目前还在使用 .NET CORE 2.2版本,在所有业务应用升级完成服务注册发现之后,最后剩下 Ocelot 网关服务升级。在升级过程中,遇到一些问题,记录此文,以便有相同情况的同学参考。

1. Ocelot 升级服务发现

根据官方文档 ,通过简单的添加配置,既可以将原有配置方式改为服务发现:

  1. 安装插件

    Install-Package Ocelot.Provider.Consul 13.5.2,.Net Core 2.x 最后一个版本

  2. 配置服务
s.AddOcelot()
    .AddConsul();
  1. 添加全局配置文件
"ServiceDiscoveryProvider": {
    "Host": "localhost",
    "Port": 8500,
    "Type": "Consul"
}
  1. 配置路由
{
    "DownstreamPathTemplate": "/api/values}",
    "DownstreamScheme": "https",
    "UpstreamPathTemplate": "/spider/api/values",
    "UpstreamHttpMethod": [ "Get" ],
    "ServiceName": "spider",
    "LoadBalancerOptions": {
        "Type": "LeastConnection"
    },
}

2. 问题产生

简单的几个步骤,Ocelot 升级完成,然而经过测试,却发现 Ocelot 并没有向我们预期那样,路由到后端的服务,而是报如下错误:

刚开始以为是配置问题,直到将日志级别调至 Debug,查看更加详细的日志才发现,下游请求的 URL 拼接有问题。

具体来说,就是 Ocelot 采用了 Consul 服务节点的 Node Name,而不是节点上对应的该服务的 IP 地址。

既然问题定位到,那么翻阅源码应该可以找到原因,首先根据 nuget 包信息导航到 https://github.com/ThreeMammals/Ocelot.Provider.Consul 地址查看 Provider 源码,经过加载调试,发现居然是正常的,但是有个疑问是,这个源码仓库中只有最早期的几个版本tag,后续版本都没有,经过查找,原来后续版本均已合并到 Ocelot 主库中,而 Nuget 包中的项目URL 并未更新,汗!

既然问题跟版本有关,就翻阅了一下 Issue 列表,还真找到了问题,而且看问题下面的讨论,踩坑的人应该不少。具体原因请直接参看以下链接:

https://github.com/ThreeMammals/Ocelot/issues/954

总结

  1. 在.NET CORE 2.x 版本中,应该采用 13.5.1 以及之前的版本,否则会产生 Node Name 问题。
  2. Ocelot.Provider.Consul 源码已合并至 Ocelot 主库 传送门

原文地址:https://www.cnblogs.com/xboo/p/12659842.html

时间: 2024-10-12 13:07:57

.NET CORE2.2 下 Ocelot+Consul服务发现踩坑记录的相关文章

Linux下部署MySQL,大小写敏感踩坑记录

今天在将开发环境中的门户数据库复制到新环境后,使用SqlSugar的ORM框架进行数据库操作的时候,出现了主键找不到的现象.排查了很久终于发现了关键点.特此记录. 1.开发环境:    操作系统:CENTOS7 64位    内存:    1GB    CPU     1/1    网络适配器:网桥模式    安装模式:最小化安装    系统语言设置:zh_CN.gb2312        数据库版本:MySQL 5.6.29 binary 模式安装    建立数据库之前:my.cnf参数配置 

Spring Cloud Consul—服务发现与Consul

服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Consul通过HTTP API和DNS提供服务发现服务.Spring Cloud Consul利用HTTP API进行服务注册和发现.这不会阻止非Spring Cloud应用程序利用DNS界面.Consul代理服务器在通过八卦协议进行通信的集群中运行,并使用Raft协议协议. 如何激活 要激活Consul服务发现,请使用组org.springframework.cloud和artifact i

一篇文章了解Consul服务发现实现原理

从 2016 年起就开始接触 Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验. 最开始使用 Consul 的人不多,这两年微服务越来越火,使用 Consul 的人也越来越多. 经常有人会问一些问题,比如: 服务注册到节点后,其他节点为什么没有同步? Client 是干什么的?(Client 有什么作用?) 能不能直接注册到 Server?(是否只有 Server 节点就够了?) 服务信息是保存在哪里的? 如果节点挂了,健康检查能不能转移到别的节点? 有些

.NET Core微服务实施之Consul服务发现与治理

原文:.NET Core微服务实施之Consul服务发现与治理 Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/downloads.html Consul nuget 命令:Install-Package Consul 我的理解是,Consul是一个服务管理者,系统中所有使用到的服务他都帮你管理好,促销高峰需要新增服务的时候,服务开启来就自动注册到Consul中,服务下线关闭,也自动从Consul注销,无缝衔接,对于

基于Docker的Consul服务发现集群搭建

原文:基于Docker的Consul服务发现集群搭建 在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架构示范,也会更加贴近于实际应用环境. 一.示例整体架构 此示例会由一个API Gateway, 一个Consul Client以及三个Consul Server组成,有关Consul的Client和Server这两种模式的Agent的背景知识,请

Redola.Rpc 集成 Consul 服务发现

Redola.Rpc 解决了什么问题? Redola.Rpc 是一个使用 C# 开发的 RPC 框架,代码开源在 GitHub 上.目前版本仅支持 .NET Framework 4.6 以上版本,未来待系统稳健后再考虑移植 .NET Standard 和 .NET Core. Redola.Rpc 在 0.3.2 版本中,尝试解决几个 RPC 设计问题: 我是谁?(Local Actor) 如何告诉别人我是谁?(Actor Directory) 我提供什么服务?(Service Catalog

寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现。本文记录HAProxy服务热加载后某微服务50%概率失效的问题。设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加

寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现.本文记录HAProxy服务热加载后某微服务50%概率失效的问题.设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加载.Marathon.端口重用 01 原文地址:https://www.cnblogs.com/yuanj

在CentOS/Windows下配置Nginx(以及踩坑)

在CentOS/Windows下配置Nginx(以及踩坑) 1. 序言 因为这类文章网上比较多,实际操作起来也大同小异,所以我并不会着重于详细配置方面,而是将我配置时踩的坑写出来. 2. CentOS 2.1 第一步下载nginx包 我选择将包放在/usr/local下 cd /usr/local wget (nginx下载目录网址) 这里的下载目录可以根据需要选择版本从而决定 请点击nginx下载查看目录 2.2 安装nginx所需环境 yum?install?gcc-c++ yum?inst

Ocelot 网关 和 consul 服务发现

服务发现 Consul 一.安装和启动 下载 [Consul](https://www.consul.io/downloads.html) 下载完成后,解压,只有一个consul.exe,把目录添加到环境变量的PATH,注意添加到系统变量,仅仅加入用户变量不起作用.打开cmd,输入 consul agen -dev // 启动Consul服务 二.在aspnetcore中注册Consul 1. 定义配置项 /// <summary> /// Consul配置 /// </summary&