请求超时
可以使用路由规则的httpReqTimeout字段指定http请求的超时。默认情况下,超时为15秒,但在此任务中,我们将reviews
服务超时重写为1秒。然而,为了看到它的效果,我们还将在ratings
服务调用中引入人为的2秒延迟。
-
将请求路由到
reviews
服务的v2 ,即调用ratings
服务的版本cat <
-
为
ratings
服务调用添加2秒延迟:cat <
-
在浏览器中打开Bookinfo URL(http:// $ GATEWAY_URL / productpage)
您应该看到Bookinfo应用程序正常工作(显示评级星标),但每次刷新页面时都会有2秒的延迟。
-
现在为
reviews
服务调用添加1秒的请求超时cat <
-
刷新Bookinfo网页
您现在应该看到它在1秒内返回(而不是2秒),但评论不可用。
了解发生了什么
在此任务中,您使用Istio将对reviews
微服务的调用的请求超时设置为1秒(而不是默认的15秒)。由于服务在处理请求时reviews
随后调用ratings
服务,因此您使用Istio在调用中注入了2秒的延迟ratings
,因此您将导致reviews
服务花费超过1秒的时间来完成,因此您可以看到超时运行。
您发现Bookinfo产品页面(调用reviews
服务填充页面)而不是显示评论显示消息:对不起,本书目前无法提供产品评论。这是它从reviews
服务接收超时错误的结果。
如果你查看,你会发现productpage
微服务也有自己的应用程序级超时(3秒)来调用reviews
微服务。请注意,在此任务中,我们使用Istio路由规则将超时设置为1秒。如果您将超时设置为大于3秒(例如,4秒)的超时,则超时将无效,因为两者中的限制性更强。更多细节可以在找到。
关于Istio中超时的另一个注意事项是,除了在路由规则中覆盖它们之外,就像在此任务中所做的那样,如果应用程序添加了“x-envoy-upstream-”,它们也可以在每个请求的基础上被覆盖。 rq-timeout-ms“出站请求的标头。在标头中,超时以毫秒(而不是第二)单位指定。
资料:
https://istio.io/docs/tasks/traffic-management/request-routing/