我正在使用作为zuul代理(@EnableZuulProxy)的前端spring spring应用程序(微服务)将来自外部源的请求路由到使用spring cloud(spring boot)编写的其他内部微服务。 zuul服务器直接位于样本部分的应用程序中
@SpringBootApplication
@Controller
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuulServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args);
}
}
我在本地运行这组服务并且它似乎都工作正常但是如果我在网络上运行它有一些负载或通过VPN然后我开始看到zuul转发错误,我在日志中看到客户端超时
有没有办法改变zuul前锋的超时,所以我可以从我的直接关注中消除这个问题。有什么可访问的参数设置。
我正处于发布阶段,这只是出现了:)
答案 0 :(得分:33)
要设置的属性一般为ribbon.ReadTimeout
,特定服务为<service>.ribbon.ReadTimeout
,以毫秒为单位。 Ribbon wiki有一些例子。 This javadoc有属性名称。
答案 1 :(得分:30)
在我的情况下,我必须更改以下属性:
zuul.host.socket-timeout-millis=30000
答案 2 :(得分:20)
我遇到了同样的问题:在长时间的请求中,尽管设置了ribbon.ReadTimeout=10000
,但Zuul的hystrix命令在大约一秒钟之后仍然保持超时。
我通过完全禁用超时来解决它:
hystrix:
command:
default:
execution:
timeout:
enabled: false
另一个有效的方法是将Zuul的Hystrix隔离策略改为THREAD:
hystrix:
command:
default:
execution:
isolation:
strategy: THREAD
thread:
timeoutInMilliseconds: 10000
答案 3 :(得分:13)
我不得不改变两次超时以迫使zuul停止超时长时间请求。即使禁用了hystrix超时,功能区仍然会超时。
hystrix:
command:
default:
execution:
timeout:
enabled: false
ribbon:
ReadTimeout: 100000
ConnectTimeout: 100000
答案 4 :(得分:10)
这对我有用,我必须在application.yml
:
zuul:
host:
connect-timeout-millis: 60000 # starting the connection
socket-timeout-millis: 60000 # monitor the continuous incoming data flow
答案 5 :(得分:3)
如果Zuul使用服务发现,则需要使用ribbon.ReadTimeout
和ribbon.SocketTimeout
功能区属性配置这些超时。
如果您通过指定网址配置了Zuul路线,则需要使用zuul.host.connect-timeout-millis
和zuul.host.socket-timeout-millis
通过路线我是指
zuul:
routes:
dummy-service:
path: /dummy/**
答案 6 :(得分:1)
我遇到了类似的问题,我试图全局设置超时,还设置了 Hystrix 和 Ribbon 问题的设置超时顺序。
花了很多时间后,我最终想到了这个解决方案。由于海量数据,我的服务最多需要50秒。
更改超时默认值之前要考虑的要点:
Hystrix 时间应大于 Ribbon ReadTimeout和ConnectionTimeout的总时间。
使用仅用于特定服务,这意味着请不要全局设置(这是行不通的)。
我的意思是用这个:
#!/bin/bash
shopt -s nullglob
for file in "$dir"/*.ym; do
if [[ ! -f "${file%.*}.job" ]]; then
echo "$file"
fi
done
代替此:
command:
your-service-name:
工作解决方案:
command:
default:
答案 7 :(得分:0)
只有application.yml
上的这些设置对我有用:
ribbon:
ReadTimeout: 90000
ConnectTimeout: 90000
eureka:
enabled: true
zuul:
host:
max-total-connections: 1000
max-per-route-connections: 100
semaphore:
max-semaphores: 500
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000000
希望它有所帮助!