處理傳遞失敗¶
您可以設定 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-sink
的Service
物件或 Knative 服務。backoffDelay
傳遞參數指定在失敗後嘗試事件傳遞重試之前的延遲時間。backoffDelay
參數的持續時間使用 ISO 8601 格式指定。例如,PT1S
指定 1 秒的延遲。backoffPolicy
傳遞參數可用於指定重試退避原則。該原則可以指定為linear
或exponential
。使用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-sink
的Service
物件或 Knative 服務。backoffDelay
傳遞參數指定在失敗後嘗試事件傳遞重試之前的延遲時間。backoffDelay
參數的持續時間使用 ISO 8601 格式指定。例如,PT1S
指定 1 秒的延遲。backoffPolicy
傳遞參數可用於指定重試退避原則。該原則可以指定為linear
或exponential
。使用linear
退避原則時,退避延遲是在重試之間指定的時間間隔。這是一個線性增加的延遲,這表示退避延遲會針對每次重試按給定的間隔增加。使用exponential
退避原則時,退避延遲會針對每次重試按給定間隔的倍數增加。retry
指定事件傳遞在傳送至死信接收器之前重試的次數。初始傳遞嘗試不包含在重試計數中,因此傳遞嘗試的總數等於retry
值 +1。
Broker 支援¶
下表總結了每個 Broker 實作類型支援的傳遞參數
Broker 類別 | 支援的傳遞參數 |
---|---|
googlecloud | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
Kafka | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
MTChannelBasedBroker | 取決於基礎通道 |
RabbitMQBroker | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
注意
deadLetterSink
必須是 GCP Pub/Sub 主題 URI。googlecloud
Broker 僅支援 exponential
退避原則。
設定通道事件傳遞¶
失敗的事件可能會根據使用的特定通道實作,在轉送至 deadLetterSink
之前使用擴充屬性來增強。這些擴充屬性如下所示
-
knativeerrordest
- 類型:字串
- 描述:傳送失敗事件的原始目的地 URL。這可能是基於哪個操作遇到失敗事件的
delivery
或reply
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 | 無 |
記憶體中 | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
Kafka | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
Natss | 無 |