最初の私の具体的な質問
トピックに 3 人のサブスクライバーがいるとしますが、特定のサブスクライバーのみをターゲットにしたいとします。これはできますか?
私が達成しようとしていること
トピックをリッスンしているサブスクライバーはメッセージを処理します。これには、データベースへのアクセスが含まれる場合があります (データベースが一時的にダウンする場合があります)。問題が発生した場合は、後で再処理できるようにしたいと考えています。
後で処理するために Defer() を使用できることはわかっていますが、メッセージ ID を保存する必要があります。明らかに、データベースがダウンしている場合、そこに保存することはできません。そのため、永続化したい場合は、別のデータストアに保存する必要があります。
その「他のデータストア」がサービス バスの場合、サブスクライバーごとにトピックを作成する必要があり、管理が少し難しいようです。私の計画は、失敗したリクエストをトピックの配信不能キューに送信することです。スケジュールされたタスクが定期的に来て、各トピックの DLQ からメッセージを取得し、処理を試みます。再度失敗した場合は、メッセージを再送信して、メッセージ自体の一部である「AttemptedTries」カウンターを増やしたいと思います。関連するサブスクライバーのみをターゲットにして、問題のないトピックのサブスクライバーを処理する必要がないようにできればと思います (この機能を使用して同様のことを実行できない場合は、おそらくフィルターなどを追加できます)。
試行回数 >= maxattempts の後、プログラマーがメッセージをどう処理するかを決定できる普遍的な「墓場」(トピック固有ではない) にメッセージを送信します。
これはそれを処理する良い方法ですか?ASB にはこの機能が組み込まれていますか?