ServiceBusトリガーを持つWebJobがいくつかありますが、処理が完了した後に処理するにはMessageProcessorカスタムがあります。Azure Webjobs ServiceBusTrigger - MaxDeliveryCountに達したときに別の機能を実行します。
メッセージが最後の再試行時(つまり、デッドレターキューに送信されようとしている)の場合は、別の処理(具体的には、警告ではなくエラーをログに記録)を行いたいと考えています。 CompleteProcessingMessageAsync関数に送られたBrokeredMessageにはDeliveryCountがありますが、元のキューに戻ってMaxDeliveryCountを見つける方法はありません。何か案は?異なるキューにはMaxDeliveryCountsが異なるため、定数の設定は実際にはオプションではありません。私が考えることができるもう一つの事は、キューのデッド・レター・キューごとに個別のジョブを作成することですが、個々のジョブではなくWebJobレベルで実行できるようにしたいと考えています。
public class CustomMessageProcessor : MessageProcessor
{
public CustomMessageProcessor(OnMessageOptions messageOptions) : base(messageOptions)
{
}
public override async Task CompleteProcessingMessageAsync(BrokeredMessage message, FunctionResult result, CancellationToken cancellationToken)
{
if (result.Succeeded)
{
if (!MessageOptions.AutoComplete)
{
cancellationToken.ThrowIfCancellationRequested();
await message.CompleteAsync();
}
}
else
{
cancellationToken.ThrowIfCancellationRequested();
//some other processing
//If message.DeliveryCount < maxDeliveryCount
// log warning
//else
// log error
await message.AbandonAsync();
}
}
}
しかし、メッセージがどのキューから来たのか、どのようにして解決するのですか? –
@ anthony-keenanそれは依存しています - どうやってカスタムメッセージプロセッサを配線しますか?どのプロセッサインスタンスがどのキューにバインドされているか知っていますか?私はSDKのこの部分を直接経験していませんが、私の理解はカスタムメッセージプロセッサーが接続されているときです(例えばメッセージングプロバイダー経由で) "エンティティパス"のようなものを見なければなりません。キャッシュされた/共有されたコレクション内のキューを参照するために使用します。 –
カスタムメッセージプロセッサは、Webjobsフレームワークの一部であるものを上書きします。残念ながら、WebJobが処理するすべてのメッセージの前後に呼び出されます。残念ながら、キュー固有ではなく、グローバルであり、キューのパスが仲介されたメッセージにないことがわかるので、そこからキューを検索することはできません。 –