하늘 대기열 저장소를 사용하여 전자 메일을 보내고 있습니다. 전자 메일은 큐 저장소에 저장되고 큐는 한 번에 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 개의 메시지가 대기열 (즉, 잘못된 비밀번호)을 차단하고 있다면 처음 30 개의 메시지가 항상 대기열에 있으므로 다음 20 개의 올바른 메시지는 전송되지 않습니다. 그래서 처음 20 개의 메시지를 지우고 큐 끝에 추가하여 20 개의 올바른 메시지를 보낼 수 있습니다. – Kaladin
내 대답이 업데이트되었습니다. HTH. –
잘못된 전자 메일 ID 등의 잘못된 메시지를 이미 확인하고이를 포이즌 큐로 이동합니다. 올바르지 않은 암호는 예제 일 뿐이 었으며 SMTP 서버가 다운 된 경우를 생각하고있었습니다. 우리 솔루션에 대해 좀 더 자세히 설명하겠습니다. 여러 개의 SMTP 서버가 있으며 메시지를 처리하기 위해 두 개의 큐를 사용하기로 결정했습니다. 첫 번째 메시지는 5 번 시도하고 실패하면 두 번째 큐로 이동합니다. 첫 번째 대기열은 매분마다 메시지를 시도하고 두 번째 대기열은 60 분마다 메시지를 시도합니다. – Kaladin