关于Ocelot 网关结合Consul实现服务转发的坑爹问题

下面是我的网关配置来验证下Ocelot的问题,如果只是做网关转发应该还ok,但是要是结合Consul来检查并健康的转发有效服务器还是有很多弊端

关键在于通过设置 DeregisterCriticalServiceAfter来处理,那么这个值要够大,如果在这个值内服务器web站点更新正常了就没有问题,如果一直失败就会注销的掉这个服务不回去健康检查了

下面用代码来说明下:

{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/Check/ocelot",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "192.168.0.233",
"Port":
},
{
"Host": "192.168.0.233",
"Port":
},
{
"Host": "192.168.0.233",
"Port":
}
],
"UpstreamPathTemplate": "/testocelot",
"UpstreamHttpMethod": [ "Get" ],
"LoadBalancer": "LeastConnection",
"ServiceName": "userservices",
"UseServiceDiscovery": true }
], "GlobalConfiguration": {
"BaseUrl": "http://192.168.0.233:20010",
"ServiceDiscoveryProvider": {
"Host": "192.168.0.233",
"Port": } }
}

网关都是结合consul服务的状态,那么服务器web网站的consul服务没有注册,何来的健康转发呢?

.NetCore 在 Configure中配置了 consul 服务注册,但是 web网站都没有运行起来 consul 服务就不存在 更不存在健康证状态

那么  利用 ServiceDiscoveryProvider 服务发现的方式来转发 根本就会失败

所以感觉还是坑~~~~

当web站点没有访问过的时候 Consul服务

关于Ocelot 网关结合Consul实现服务转发的坑爹问题

访问web站点

关于Ocelot 网关结合Consul实现服务转发的坑爹问题

所以 Consul 拿来做服务器健康检查就行了 结合Ocelot实现LB还是有些牵强(至少第一次注册服务需要访问站点),如果能把注册服务单独出来不需要放在web站点中就行了

当然访问之后就可以了

关于Ocelot 网关结合Consul实现服务转发的坑爹问题

这里三个服务都在了不同的地址

上一篇:【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(五)


下一篇:python接口自动化(六)--发送get请求接口(详解)