重试策略以不触发 POST 请求

问题描述 投票:0回答:1

是否可以在 Dapr 中配置弹性策略,以在 HTTP 请求为 POST 时不执行重试?例如,.NET 中的 Polly 库允许对重试和断路器策略进行细粒度配置。在 Dapr 中可以做同样的事情吗?

apiVersion: dapr.io/v1alpha1
kind: Resiliency
metadata:
  name: resiliency-policy
scopes:
  - shoppingbasket
spec:
  policies:
    retries:
      operation:
        policy: constant
        duration: 5s
        maxRetries: 3

    circuitBreakers:
      serviceCB:
        maxRequests: 1
        timeout: 30s
        trip: consecutiveFailures >= 3

  targets:
    apps:
      discount:
        retry: operation
        circuitBreaker: serviceCB
retry-logic dapr
1个回答
0
投票

Dapr 是用 Golang 编写的,因此它在底层不使用 Polly。

它的触发概念略有不同:

  • 在 Polly 中,您可以定义重试策略/策略何时应处理给定操作的结果。
  • 在 Dapr 中,只要给定操作返回异常状态,就可以触发重试。 在这里您可以找到一些示例。

其中一个 github 问题中,他们提出了以下内容:

您说得对,它会重试任何错误,包括 4xx 响应。对于弹性的初始版本,我们采取了重试次数多于不重试的方法。将来,我们可能会添加其他过滤器/场景,您可以触发重试。我知道有计划为弹性阶段 2 添加更多 CEL 级别表达式。

提案 PR 中,您可以看到一些关于条件重试的提及:

 apis:
    invoke:
      - match: appId == "appB"
        # Nested rules: Prevent duplicative checks in rules.
        # Its likely that controler-gen does not support this
        # but apiextensionsv1.JSON can be used as workaround.
        rules:
          - match:
              request.method == "GET" &&
              request.metadata.count > 1000
            timeout: largeResponse
            retry: largeResponse
          - match:
              request.path == "/someOperation"
            retry: someOperation

不幸的是,据我所知,第二阶段尚未发生。

© www.soinside.com 2019 - 2024. All rights reserved.