У меня сейчас есть функция azure, которая запускается по триггеру служебной шины (триггеру очереди) и выводит SendGridMessage.Хитрость заключается в том, что мне нужно выполнить некоторую очистку в хранилище больших двоичных объектов после того, как функция успешно отправила сообщение sendgrid, но, похоже, у меня нет способа определить, была ли функция успешной, пока она не выйдет из области видимости.
В настоящее время я пытаюсь отправить сообщение, которое необходимо очистить, в очередь очистки и позаботиться об этом после перехвата попытки, но я думаю, что все еще сталкиваюсь с той же проблемой.Функция может завершиться успешно, а затем потерпеть неудачу на выходе SendGrid, и сообщение будет очищено, но отброшено обратно в очередь для повторной обработки в этой функции и завершится ошибкой.Bleh.
Триггер очереди и выходные данные Sendgrid
[FunctionName("ProcessEmail")]
public static void Run([ServiceBusTrigger("email-queue-jobs", AccessRights.Manage,
Connection = "MicroServicesServiceBus")]OutgoingEmail outgoingEmail, TraceWriter log,
[ServiceBus("email-queue-cleanup", Connection = "MicroServicesServiceBus",
EntityType = Microsoft.Azure.WebJobs.ServiceBus.EntityType.Queue)] IAsyncCollector<OutgoingEmail> cleanupEmailQueue,
[SendGrid] out SendGridMessage message)
{
try
{
log.Info($"Attempting to send the email {outgoingEmail.Id}");
message = SendgridHelper.ConvertToSendgridMessage(outgoingEmail);
log.Info("Successfully sent email:");
log.Info(JsonConvert.SerializeObject(outgoingEmail));
}
catch (Exception ex)
{
message = null;
throw ex;
}
// Add email to the cleanup queue
log.Info("Sending email to the cleanup queue.");
cleanupEmailQueue.AddAsync(outgoingEmail).Wait();
}