设置请求超时

    • 部署BookInfo 示例程序。
    • 执行如下命令,初始化基于应用版本的路由。

    http的请求超时可以在路由规则中的httpReqTimeout字段来设置。缺省的超时时间是15秒,在下面我们会把reviews服务的超时时间设置为一秒钟。为了展示效果,我们还需要在调用ratings服务的时候加入两秒钟的延迟。

    1. 路由请求到reviews服务的v2版本,例如,这个版本的服务会调用ratings服务

    2. 在浏览器中打开 BookInfo 的网址(http://$GATEWAY_URL/productpage)。

      会看到BookInfo应用在正常运行(并且显示了评级的星星),但是你也会注意到,每次刷新页面的时候会有两秒钟的延迟。

    3. 刷新BookInfo页面

    这一任务中,使用Istio为reviews服务设置了一秒钟的请求超时(而不是缺省的 15 秒)。由于reviews服务在处理请求的时候会调用下游的服务,而ratings服务已经被我们利用Istio注入了两秒钟的延迟,这一变动会让reviews服务的处理时间超过一秒,故而引发了超时。

    你会看到BookInfo productpage(需要调用reviews服务来生成页面)不会显示 review信息,而是显示为:“Sorry, product reviews are currently unavailable for this book. ”,这是reviews服务的超时引发的错误造成的结果。

    如果检查一下,会发现productpage服务在调用reviews的时候,也有自己的应用级别的超时(三秒钟)。我们前面的测试中使用了一秒钟的超时,如果我们把下游服务的超时时间设置为大于三秒钟的值(例如四秒),由于三秒钟的限制更为严格,会被优先处理,因此过大的超时时间就不会生效了。参看错误处理一节会有更详细的信息。

    还需要注意的就是,除了在路由规则中设置超时之外,还可以在请求中加入“x-envoy-upstream-rq-timeout-ms”头来设置超时,在这一设置中的时间单位是毫秒而不是秒。

    • 如果没有计划进一步运行下面的任务,可以参照 中的介绍来关闭这一应用。