一定期間後に毒キューに一斉に移動されリプロ(約500メッセージの周りの)キューにメッセージを追加Azureのストレージ・キュー・メッセージが
を繰り返します。 キューメッセージを処理するキュートリガー関数アプリを追加します。キューから
期待される動作
すべてのメッセージが処理されます。メッセージの処理中に例外がスローされた場合、メッセージはポイズンキューに送信されます。
メッセージが処理されている起動
実際の行動。一定時間(約30〜60秒程度)の後、キューに残っているメッセージはすべてポイズンキューに移動します。その瞬間に処理されたメッセージは例外としてスローされません。
キューメッセージの有効期間がデフォルトのものであることを確認しました。7日。 WindowsAzure.Storageパッケージを7.2.1にダウングレードしようとしましたが、成功しませんでした。
WindowsAzure.Storageバージョンは8.5.0です。
機能アプリがクラッシュすると、すべてのメッセージがポイズンキューに移動することがありますか?
EDIT
これは、メッセージがキューに追加されている方法です。
public async Task AddMessage()
{
var queueModel = new QueueModel
{
// queue model properties
};
await AddMessageToQueueAsync(queueModel);
}
public async Task AddMessageToQueueAsync(T messageObject, TimeSpan? initialVisibilityDelay = null)
{
var queue = GetQueue();
var jsonMessage = JsonConvert.SerializeObject(messageObject);
var message = new CloudQueueMessage(jsonMessage);
await queue.AddMessageAsync(message, TimeSpan.FromDays(7), initialVisibilityDelay, new QueueRequestOptions(), new OperationContext());
}
private CloudQueue GetQueue()
{
var queueClient = _storageAccount.CreateCloudQueueClient();
var queue = queueClient.GetQueueReference(_queueName);
queue.CreateIfNotExists();
return queue;
}
そして、これはメッセージを処理する機能アプリです:
[FunctionName("ProcessQueue")]
public static async Task Run([QueueTrigger("queue-name", Connection = "AzureWebJobsStorage")]string queueItem, TraceWriter log)
{
if (String.IsNullOrEmpty(queueItem))
{
return;
}
var queueModel = JsonConvert.DeserializeObject<QueueModel>(queueItem);
if (queueModel == null)
{
return;
}
try
{
// process the message
}
catch (Exception ex)
{
// message is moved to the poison-queue but no exception is thrown
log.Error(ex.Message, ex);
}
}
関数の実行回数は分かりますか? 〜500回実行されますか? –
〜500回実行されるはずですが、残りのメッセージが毒キューに移動されるまで約300回実行されます。 – GicaGG
あなたのreproのコードを追加してください – Mikhail