作者:周鑫先生_852 | 来源:互联网 | 2023-09-10 13:37
篇首语:本文由编程笔记#小编为大家整理,主要介绍了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映射设置