zuul使用serviceId超时的时候返回timed-out and no fallback available

在使用zuul做网关,在微服务端使用@HystrixCommand添加了fallbackMethod方法,并开启了超时检查。
当在网关中用serviceId的时候,如下配置
zuul: 
  ignoredServices: '*' 
  routes: 
     lrh-auth-service: 
        path: /auth/** 
        stripPrefix: false 
        serviceId: lrh-auth-service
请求返回的时候会报错{
  "timestamp": 1496282537105,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "com.netflix.zuul.exception.ZuulException",
  "message": "TIMEOUT"
}
并不是在 fallbackMethod中定义的返回错误信息,
如果是使用url的配置方式就可以返回错误信息。
zuul: 
  ignoredServices: '*' 
  routes: 
     lrh-auth-service: 
        path: /auth/** 
        stripPrefix: false 
        url: http://localhost:4040 
系统中有很多微服务模块,用serviceId的方式肯定是最好的,在超时的情况下有什么解决方案可以让fallbackMethod返回自定义的错误信息?
已邀请:

itmuch.com - 《Spring Cloud与Docker微服务架构实战》作者

赞同来自: zhangzhizhong g29tony

zuul整合了hystrix。hystrix默认有超时时间,是1秒。

可以参考我的博客设置下hystrix的超时时间:http://www.itmuch.com/spring-c ... fail/
zuul: 
ignoredServices: '*'
routes:
lrh-auth-service:
path: /auth/**
stripPrefix: false
serviceId: lrh-auth-service
这种玩法,整合了hystrix + ribbon。因此,会有hystrix 1秒就超时的问题。
zuul: 
ignoredServices: '*'
routes:
lrh-auth-service:
path: /auth/**
stripPrefix: false
url: http://localhost:4040
这种玩法,既用不上hystrix,也没法实现基于ribbon的负载均衡,所以hystrix不会超时。
不太明天你说的问题
1、通过url方式路由是经过SimpleHostRoutingFilter过滤器路由,默认是没有hystrix、ribbon支持,只是简单的使用httpclient转发请求
2、通过serviceId方式路由是经过RibbonRoutingFilter过滤器路由,有hystrix、ribbon支持
 
对于你说的微服务端使用@HystrixCommand我理解是目标服务使用hystrix服务,与zuul没有直接关系;通过serviceId报错信息应该是通过RibbonRoutingFilter路由,hystrix抛出超时异常(默认1秒超时)是zuul本身报错,所以报这个错误信息
通过url方式是用过SimpleHostRoutingFilter路由,超时时间默认10秒,返回的是目标服务执行的fallbackMethod定义的数据
 
不知道我理解的对不对

要回复问题请先登录注册