6

Azure.Storage.Queue を使用してキューからメッセージを取得する場合

queue.GetMessage(TimeSpan.FromMinutes(20));

可視性タイムアウトを設定できますが、Azure.WebJobs (SDK 0.4.0-beta) 属性を使用して Web ジョブをキューに自動バインドしようとすると、

すなわち

public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message){
       //do something with queue item
}

属性に表示タイムアウトを設定する方法はありますか? JobHostConfiguration().Queues にはオプションがないようです。オーバーライドする方法がない場合は、標準の 30 秒ですか?

4

2 に答える 2

5

最新の v1.1.0 リリースでは、 JobHostConfiguration.Queues.QueueProcessorFactory を介して独自のカスタム QueueProcessor インスタンスを登録することで、可視性タイムアウトを制御できるようになりました。これにより、高度なメッセージ処理動作をグローバルに、またはキュー/関数ごとに制御できます。

たとえば、失敗したメッセージの可視性を設定するには、次のようにReleaseMessageAsyncをオーバーライドできます。

protected override async Task ReleaseMessageAsync(CloudQueueMessage message, FunctionResult result, TimeSpan visibilityTimeout, CancellationToken cancellationToken)
{
    // demonstrates how visibility timeout for failed messages can be customized
    // the logic here could implement exponential backoff, etc.
    visibilityTimeout = TimeSpan.FromSeconds(message.DequeueCount);

    await base.ReleaseMessageAsync(message, result, visibilityTimeout, cancellationToken);
}

詳細については、こちらのリリース ノートを参照してください。

于 2015-12-04T17:09:04.940 に答える