Я использую хранилище очереди в лазурном порядке для отправки электронной почты. Письма хранятся в хранилище очередей, и очередь отправляет по 20 писем за раз.Azure Очередь хранения не отправляет сообщение очереди
//Checks for messages inn the queue
foreach (CloudQueueMessage msgin sendEmailQueue.GetMessages(20, TimeSpan.FromSeconds(50)))
{
ProcessQueueMessage(msg);
}
Проблема, которую я имею что когда электронную почту добавляются в очередь с некорректными реквизитами SMTP (т.е. неверного пароль), сообщение остается в очереди, поскольку не может отправлять и предотвращает другие сообщения в очереди от отправки.
private void ProcessQueueMessage(CloudQueueMessage msg)
{
try
{
//We try to send an email
SendEmail(emailRowInMessageTable, htmlMessageBodyRef, textMessageBodyRef);
} catch (SmtpException e)
{
string err = e.Message;
//When an error occurs we check to see if the message failed to send certain no. of
times
if (msg.DequeueCount > 10)
{
//We delete the message from queue
sendEmailQueue.DeleteMessage(msg);
return;
} else
{
//delete from top of queue
sendEmailQueue.DeleteMessage(msg);
//insert into end of queue
sendEmailQueue.AddMessage(msg);
return;
}
}
}
Решение, которое я попытался было удалить сообщение из очереди, если произошла ошибка, и добавить его обратно в конец очереди, в результате правильных писем, являющихся разослать. Но удаление и добавление сообщение обратно в очередь сбрасывает свойство dequeue, которое не является идеальным , так как я использую свойство dequeue, чтобы убедиться, что сообщение не находится в очереди навсегда.
Что было бы лучшим решением в этой ситуации?
Из моего понимания, если первое сообщение 30 блокирует очередь (т. Е. Неправильный пароль), следующее 20 правильное сообщение не будет отправлено, так как первые 30 сообщений всегда находятся в очереди. Поэтому я хочу удалить первые 30 сообщений и добавить их в конец очереди, чтобы можно было отправить 20 правильных сообщений. – Kaladin
Обновлен мой ответ. НТН. –
Мы уже проверяем наличие плохих сообщений, таких как неправильный идентификатор электронной почты и т. Д., И переместите его в ядовитую очередь. Неправильный пароль был всего лишь примером, я думал больше о том, когда серверы SMTP недоступны и т. Д. Я объясню наше решение немного подробнее. У нас есть несколько SMTP-серверов, и мы решили использовать две очереди для обработки сообщения. Первое будет пытаться отправить сообщение 5 раз, и если оно не удастся переместить его во вторую очередь. Первая очередь будет проверять сообщение каждую минуту, а вторая очередь - на каждые 60 минут. – Kaladin