デッドレター方式を使用します

deadletter この方法を使用するには、次のことを行う必要があります

  • application.conf ファイルに 2 つのプロパティを追加します。
  • エラーが発生したメッセージをアーカイブするためのインデックス レイヤーを作成します。

application.conf のデッドレターのプロパティ

application.conf ファイルに追加する必要がある 2 つのプロパティは次のとおりです。

  • deadletter.hrn
  • deadletter.layer

両方のプロパティが error 設定の下に移動します。 詳細について は、「アプリケーションの設定」を参照してください。

デッドレターインデックス レイヤー

deadletter エラー処理方法では、インデックス レイヤーでエラーが発生したメッセージがアーカイブされます。 この特別なインデックス レイヤーには、次の設定が必要です。

  • コンテンツタイプは application/x-avro-binary である必要があります。
  • コンテンツのエンコーディング は非圧縮にする必要があります
  • 次の名前と設定を持つ 4 つのインデックス属性が必要です。

    • timewindow 名前の type 属性 **indexUploadTime**。 目的のを選択 durationできます。 この属性には、インデックスアップロードのタイムスタンプが期間の値で切り捨てられて保存されます。
    • string 名前の type 属性 **realm**。 この属性には、正常に処理されたメッセージのインデックスが作成されるインデックス レイヤーのレルムが保存されます。
    • string 名前の type 属性 **catalogId**。 この属性は catalogId 、正常に処理されたメッセージのインデックスが作成されたインデックス レイヤーのを格納します。
    • string name を持つタイプ属性 **layerId**。 この属性は layerId 、正常に処理されたメッセージのインデックスが作成されたインデックス レイヤーのを格納します。

任意の TTL 設定を選択できます。

特殊なインデックス レイヤーがこれらの設定に従わない場合、パイプラインは初期化に失敗します。

カスタムデッドレター変換

deadletter エラーを回避する transformForDeadLetter(message) には、 UDF インターフェイスでメソッドのカスタム実装を提供します。 これにより message 、以下に示すように、デッドレターメッセージスキーマのフィールドの内容を、デッドレターインデックス レイヤーにアーカイブする前に変更できます。

@Override
public byte[] transformForDeadLetter(byte[] message) {
    return (new String(message) + "this message has been modified").getBytes();
}

  • transformForDeadLetter はオプションの API です。 実装を提供しない場合、元のメッセージは deadletter インデックス レイヤーにアーカイブされます。
  • transformForDeadLetter API の実装でエラーが発生した場合、元のメッセージはデッドレターインデックス レイヤーにアーカイブされます。

デッドレターメッセージ

deadletter エラー対策として、データアーカイブライブラリは、ユーザー定義関数の実装でエラーシナリオが発生したメッセージを集約およびアーカイブします。

メッセージは、次のメタデータでアーカイブされます。

  • messageId
  • ingestionTime
  • processingTime

Data Archiving ライブラリでは、デッドレターメッセージが Avro 形式でアーカイブされます。 Avro スキーマ DeadLetterMessage は次のとおりです。

{
  "namespace": "com.here.platform.dal",
  "type": "record",
  "doc": "deadletter message format",
  "name": "DeadLetterMessage",
  "fields": [
    { "name": "message", "type": "bytes"},
    { "name": "messageId", "type": "string"},
    { "name": "ingestionTime", "type": "string"},
    { "name": "processingTime", "type": "string"}
  ]
}

この Avro スキーマを使用して、デッドレターインデックス レイヤーに保存されているデッドレターメッセージを再処理またはデシリアライズできます。

」に一致する結果は 件です

    」に一致する結果はありません