Ocelot 发现服务总是失败的解决办法

一、问题 

今天用 Ocelot + Consul 项目,进行微服务实践,可是 Ocelot 的发现服务总是失败。

二、解决

2.1  解决方法:

不得不下载了 Ocelot 源码进行追踪排查。

2.2 问题根源:

发现,Ocelot 的 DownstreamPathTemplate 最终变换成  http://hostname:port/url  的形式。是发生在 Consul 注册时的问题。

2.3 Consul 注册时的问题修正:

注意而 hostname 是由Consul 的 -node 参数指定的!

所以,

consul agent -server -datacenter=dc1 -bootstrap  -data-dir ./data  -ui  -node=n1 -bind 192.168.11.211 -client=0.0.0.0

其中 -node=n1 是一个大坑。应该略去,系统会自己设置为自己的主机名字 hostname。

所以我实际上用了配置文件 node1.json,也是去掉了该项。

{
  "datacenter": "dc1",
  "data_dir": "c:/data/app/consul/node1",
  "log_level": "INFO",
  "server": true,
  "ui": true,
  "bind_addr": "192.168.11.211",
  "client_addr": "127.0.0.1",
  "advertise_addr": "192.168.11.211",
  "bootstrap_expect": 1,
  "ports":{
    "http": 8500,
    "dns": 8600,
    "server": 8300,
    "serf_lan": 8301,
    "serf_wan": 8302
    }
}

然后调用方式:

consul agent -config-dir=e:/consul/node1.json

然后用另一台服务器加入

consul agent -data-dir /tmp/consul  -bind=192.168.11.246 -join 192.168.11.248

这时 Consul 的 web 管理界面为:

它会自动带上主机名: HNSever 和 LGB-PC

在注册服务后,最终会变成  http://hostname:port/ + url 模板 的形式。

2.4  hostname 不能访问问题修改

如果这时,还是返回   错误代码 HTTP ERROR 500  访问失败。就是  hostname 不能转换为 ipaddress.

所以需要修改 windows 的 hosts 文件

打开系统目录:c:/windows/system32/drivers/etc找到hosts文件,打开hosts文件并在最后面添加一条记录

例如:

192.168.11.248  HNServer

192.168.11.211  LGB-PC

然后就能正常的发现服务了!

三、参考

Ocelot + Consul实践

netcore ocelot api网关结合consul服务发现

Windows下主机名和IP映射设置

原文地址:https://www.cnblogs.com/citycomputing/p/12070909.html

时间: 2024-10-09 07:34:24

Ocelot 发现服务总是失败的解决办法的相关文章

升域的时候出现“安装Active Directory 域服务二进制文件失败”的解决办法

错误内容: 检测是否已安装Active Directory域服务二进制文件失败.错误是:请求的操作失败.需要重新启动系统才能回滚所做的更改. 解决方法 STEP1 进入服务器管理器,点击左下角的重新启动服务器. STEP2 控制面板-管理工具--服务--开启remote register服务. OK了,好不容易从搜到的,本来都要准备重装了.

C#开发Windows Services服务--服务安装失败的解决办法

问题1:“System.Security.SecurityException:未找到源,但未能搜索某些或全部事件日志.不可访问的日志: Security.” 正在运行事务处理安装. 正在开始安装的“安装”阶段. 查看日志文件的内容以获得…\bin\Debug\Service2.exe程序集的进度. 该文件位于…\bin\Debug\Service2.InstallLog. 在“安装”阶段发生异常. System.Security.SecurityException:未找到源,但未能搜索某些或全部

WCF传输过大的数据导致失败的解决办法

WCF传输过大的数据导致失败的解决办法 WCF服务默认是不配置数据传输的限制大小的,那么默认的大小好像是65535B,这才65KB左右,如果希望传输更大一些的数据呢,就需要手动指定一下缓冲区的大小了. 主要是为binding设置几个最大值属性就可以了,包括服务端和客户端均进行设置,不过配置都是一样的. <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpB

sqlserver sa用户登陆失败的解决办法

sqlserver sa用户登陆失败的解决办法 如下图以此模仿: 1.右键-属性 2.找到安全: 3.勾选如图: 4.sa用户密码重置: 5.服务重启:

iMac 更新XCode 5.0.1 到 5.1.1 失败,解决办法

原因: 因为, 我的 小IPHONE4,在7.0.4版本 超级卡, 昨晚升级到7.1.1 . 今天发现,iMac上的XCODE, 不能识别我的手机,提示说XCODE的版本低,让升级. 之后,XCODE升级过程中,出现问题! 解决办法,如下: 在Finder中,我的电脑(小房子图标) -  资源库 - Developer - XCode   .   一般安装XCode都会安装到这个目录下,      选中XCODE, CMD+DEL 删掉, (或不放心的话, 可以剪切到某个别的路径下),   再尝

Win 2008 R2安装SQL Server 2008“性能计数器注册表配置单元一致性”失败的解决办法

Win 2008 R2安装SQL Server 2008"性能计数器注册表配置单元一致性"失败的解决办法(2011-02-23 19:37:32) 转载▼   今天在惠普服务器上安装数据库2008时,在进行数据库安装检测时总是有一点通不过,提示"性能计数器注册表配置单元一致性失败".以前在其他的服务器上安装都没有碰到过这个问题.开始以为系统没有装好,后面重装了还是一样的.但同一张系统盘在IBM等其他服务器安装系统后,再安装数据库没有出现此问题,很是令人费解.后来在网

阿里云CentOS 7.2 MySQL服务启动失败的解决思路

阿里云 CentOS 7.2 MySQL服务启动失败的解决思路 前言 : 昨天刚刚搭建好的MySQL让老大看了一下,经过测试已经完成任务.但是今天早晨来的时候发现服务器被关了,此时我的心情崩溃的,但是我非常冷静的解决了MySQL问题.如下: 启动MySQL服务器失败,如下所示: [[email protected] ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl):  Job for mysqld.service faile

Android Studio导入Fresco Build失败的解决办法

Android Studio导入Fresco Build失败的解决办法 导入facebook 的 Fresco后,如果发现编译的过程中出现 Error:Execution failed for task ':imagepipeline:ndk_build_bitmaps'. A problem occurred starting process 'command 'ndk-build" 大家可以在 imagepipeline 子项目里面的 gradle.properties 文件中得最后添加 n

Ubuntu下sudo apt-get install vim 失败的解决办法

Ubuntu下 执行命令:sudo apt-get install vim 失败 解决办法: 更新一下,命令:sudo apt-get update 再安装即可成功:sudo apt-get install vim Ubuntu下sudo apt-get install vim 失败的解决办法,布布扣,bubuko.com