デッドレター方式を使用します
deadletter
この方法を使用するには、次のことを行う必要があります
application.conf
ファイルに 2 つのプロパティを追加します。 - エラーが発生したメッセージをアーカイブするためのインデックス レイヤーを作成します。
application.conf のデッドレターのプロパティ
application.conf
ファイルに追加する必要がある 2 つのプロパティは次のとおりです。
deadletter.hrn
deadletter.layer
両方のプロパティが error
設定の下に移動します。 詳細について は、「アプリケーションの設定」を参照してください。
デッドレターインデックス レイヤー
deadletter
エラー処理方法では、インデックス レイヤーでエラーが発生したメッセージがアーカイブされます。 この特別なインデックス レイヤーには、次の設定が必要です。
任意の 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 スキーマを使用して、デッドレターインデックス レイヤーに保存されているデッドレターメッセージを再処理またはデシリアライズできます。