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