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

Posted citycomputing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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映射设置

 

以上是关于Ocelot 发现服务总是失败的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

Ocelot- 服务发现

Ocelot简易教程之请求聚合以及服务发现

API网关Ocelot 使用Polly 处理部分失败问题

微服务--Ocelot+Consul整合使用,网关+服务注册发现

手动造轮子——为Ocelot集成Nacos注册中心

github下载速度太慢解决办法