我有一个使用 Istio 1.7.4 在 kubernets 上运行的应用程序(基于微服务)
微服务有自己的集成失败事务补偿机制。
但是当某些集成有 503 状态码响应时,Istio 正在重试请求。我需要禁用它(至少在 POST 上,这是非同质的)。
并让应用程序处理它。
但是我尝试了很多方法都没有成功。有人能帮我吗?
我有一个使用 Istio 1.7.4 在 kubernets 上运行的应用程序(基于微服务)
微服务有自己的集成失败事务补偿机制。
但是当某些集成有 503 状态码响应时,Istio 正在重试请求。我需要禁用它(至少在 POST 上,这是非同质的)。
并让应用程序处理它。
但是我尝试了很多方法都没有成功。有人能帮我吗?
文档
retry
是硬编码的,它的值等于 2。重试间隔(25ms+)是可变的,由 Istio 自动确定,防止被调用的服务被请求淹没。HTTP 请求的默认重试行为是在返回错误之前重试两次。
顺便说一句,它最初是 10,但在Enable retries for specific status codes 中减少到 2,并将 num retries 减少到 2 commit。
您可以在虚拟服务中针对每个服务调整重试设置,而无需修改服务代码。您还可以通过添加每次重试超时来进一步优化您的重试行为,指定您希望等待每次重试尝试成功连接到服务的时间量。
例子
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
retries:
attempts: 3
perTryTimeout: 2s
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: no-retries-for-one-service
spec:
hosts:
- one-service.default.svc.cluster.local
http:
- retries:
attempts: 0
route:
- destination:
host: one-service.default.svc.cluster.local