跳至內容

處理傳遞失敗

您可以設定 Knative 事件元件的事件傳遞參數,這些參數會在事件無法傳遞時套用

設定訂閱事件傳遞

您可以透過在 Subscription 物件中新增 delivery 規格來設定每個訂閱的事件傳遞方式,如下列範例所示

apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
  name: example-subscription
  namespace: example-namespace
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: example-sink
    backoffDelay: <duration>
    backoffPolicy: <policy-type>
    retry: <integer>

其中

  • deadLetterSink 規格包含用於啟用死信接收器的設定。這會告知訂閱,無法傳遞至訂閱者的事件會發生什麼情況。當設定此項目時,無法傳遞的事件會傳送至死信接收器目的地。目的地可以是 Knative 服務或 URI。在此範例中,目的地是名為 example-sinkService 物件或 Knative 服務。
  • backoffDelay 傳遞參數指定在失敗後嘗試事件傳遞重試之前的延遲時間。backoffDelay 參數的持續時間使用 ISO 8601 格式指定。例如,PT1S 指定 1 秒的延遲。
  • backoffPolicy 傳遞參數可用於指定重試退避原則。該原則可以指定為 linearexponential。使用 linear 退避原則時,退避延遲是在重試之間指定的時間間隔。使用 exponential 退避原則時,退避延遲等於 backoffDelay*2^<重試次數>
  • retry 指定事件傳遞在傳送至死信接收器之前重試的次數。

設定 Broker 事件傳遞

您可以透過新增 delivery 規格來設定每個 Broker 的事件傳遞方式,如下列範例所示

apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
  name: with-dead-letter-sink
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: example-sink
    backoffDelay: <duration>
    backoffPolicy: <policy-type>
    retry: <integer>

其中

  • deadLetterSink 規格包含用於啟用死信接收器的設定。這會告知訂閱,無法傳遞至訂閱者的事件會發生什麼情況。當設定此項目時,無法傳遞的事件會傳送至死信接收器目的地。目的地可以是任何符合 Knative 事件接收器合約的可定址物件,例如 Knative 服務、Kubernetes 服務或 URI。在此範例中,目的地是名為 example-sinkService 物件或 Knative 服務。
  • backoffDelay 傳遞參數指定在失敗後嘗試事件傳遞重試之前的延遲時間。backoffDelay 參數的持續時間使用 ISO 8601 格式指定。例如,PT1S 指定 1 秒的延遲。
  • backoffPolicy 傳遞參數可用於指定重試退避原則。該原則可以指定為 linearexponential。使用 linear 退避原則時,退避延遲是在重試之間指定的時間間隔。這是一個線性增加的延遲,這表示退避延遲會針對每次重試按給定的間隔增加。使用 exponential 退避原則時,退避延遲會針對每次重試按給定間隔的倍數增加。
  • retry 指定事件傳遞在傳送至死信接收器之前重試的次數。初始傳遞嘗試不包含在重試計數中,因此傳遞嘗試的總數等於 retry 值 +1。

Broker 支援

下表總結了每個 Broker 實作類型支援的傳遞參數

Broker 類別 支援的傳遞參數
googlecloud deadLetterSinkretrybackoffPolicybackoffDelay
Kafka deadLetterSinkretrybackoffPolicybackoffDelay
MTChannelBasedBroker 取決於基礎通道
RabbitMQBroker deadLetterSinkretrybackoffPolicybackoffDelay

注意

deadLetterSink 必須是 GCP Pub/Sub 主題 URI。googlecloud Broker 僅支援 exponential 退避原則。

設定通道事件傳遞

失敗的事件可能會根據使用的特定通道實作,在轉送至 deadLetterSink 之前使用擴充屬性來增強。這些擴充屬性如下所示

  • knativeerrordest

    • 類型:字串
    • 描述:傳送失敗事件的原始目的地 URL。這可能是基於哪個操作遇到失敗事件的 deliveryreply URL。
    • 限制:永遠存在,因為每個 HTTP 要求都有一個目的地 URL。
    • 範例
      • "http://myservice.mynamespace.svc.cluster.local:3000/mypath"
      • ...任何 deadLetterSink URL...
  • knativeerrorcode

    • 類型:整數
    • 描述:來自最終事件分派嘗試的 HTTP 回應 StatusCode
    • 限制:永遠存在,因為每個 HTTP 回應都包含 StatusCode
    • 範例
      • "500"
      • ...任何 HTTP StatusCode...
  • knativeerrordata

    • 類型:字串
    • 描述:來自最終事件分派嘗試的 HTTP 回應 Body
    • 限制:如果 HTTP 回應 Body 為空,則為空,如果長度過長,可能會被截斷。
    • 範例
      • '內部伺服器錯誤:無法處理事件。'
      • '{"key": "value"}'
      • ...任何 HTTP 回應 Body...

通道支援

下表總結了每個通道實作支援的傳遞參數。

通道類型 支援的傳遞參數
GCP PubSub
記憶體中 deadLetterSinkretrybackoffPolicybackoffDelay
Kafka deadLetterSinkretrybackoffPolicybackoffDelay
Natss

我們使用分析工具和 Cookie 來了解網站流量。您使用我們網站的資訊會因此目的與 Google 分享。了解詳情。