设置请求超时
HTTP 请求的超时可以用的 timeout 字段来指定。默认情况下,超时是禁用的,本任务中,会把 服务的超时设置为 1 秒。为了观察效果,还需要在对 ratings
服务的调用上人为引入 2 秒的延迟。
将请求路由到
reviews
服务的 v2 版本,它会发起对ratings
服务的调用:现在给对 服务的调用增加一个半秒的请求超时:
刷新 Bookinfo 页面。
这时候应该看到 1 秒钟就会返回,而不是之前的 2 秒钟,但
reviews
是不可用的。即使超时配置为半秒,响应仍需要 1 秒,是因为
productpage
服务中存在硬编码重试,因此它在返回之前调用reviews
服务超时两次。
可以观察到,Bookinfo 的页面(调用 reviews
服务来生成页面)没显示评论,而是显示了消息:Sorry, product reviews are currently unavailable for this book. 这就是它收到了来自 reviews
服务的超时错误信息。
如果看过故障注入任务,就会发现 productpage
微服务在调用 微服务时,还有它自己的应用级的超时(3 秒)设置。注意在本任务中使用 Istio 路由规则设置了半秒的超时。如果将超时设置为大于 3 秒(比如 4 秒),则超时将不会有任何影响,因为这两个超时的限制性更强。更多细节可以参考。
还有一点关于 Istio 中超时控制方面的补充说明,除了像本文一样在路由规则中进行超时设置之外,还可以进行请求一级的设置,只需在应用的对外请求中加入 x-envoy-upstream-rq-timeout-ms
请求头即可。在这个请求头中的超时设置单位是毫秒而不是秒。
删除应用程序的路由规则:
如果您不打算探索任何后续任务,请参阅 的说明关闭应用程序。