У меня есть функция Azure с установленным атрибутом ввода служебной шины и выходным атрибутом служебной шины.
Это означает, что все, что я возвращаю из этой функции, будет возвращено в очередь «возврата».
Однако я хочу вручную обработать некоторые сообщения, так как нет смысла повторять их, я просто хочу поместить их прямо в LDQ и продолжить.
Поэтому я добавил MessageReceiver в качестве параметра с lockToken.
Все хорошо.
Но теперь, если я обработаю сообщение и отправлю в DLQ, у меня не будет возможности завершить выполнение функции изящно, поскольку она ожидает возврата.Поэтому я выбрасываю исключение.Но теперь у меня есть многочисленные журналы ошибок в выводе типа «блокировка недействительна».
Я попытался установить для автозаполнения значение false, но тогда у меня возникла другая проблема;Как я могу гарантировать, что смогу вернуть сообщение И зарегистрировать его в транзакции и обработать откат?
Любое руководство ??
Пример:
public static class Function1
{
[FunctionName("Function1")]
[return: ServiceBus("returnQueueName", Connection = "myConnectionString")]
public static async System.Threading.Tasks.Task<ReturnMessage> RunAsync([ServiceBusTrigger("mytopic", "mysubscription", Connection = "myConnectionString")]
string mySbMsg, ILogger log,
MessageReceiver messageReceiver, string lockToken)
{
log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
await messageReceiver.DeadLetterAsync(lockToken);
return new ReturnMessage();
}
}
public class ReturnMessage
{
public string Payload { get; set; }
}
Надеюсь, вы видите, что входная и выходная очередь обрабатываются хост-системой - Azure.Мне это нравится, потому что он будет присматривать за атомсити для меня.
Но если я включу строку:
await messageReceiver.DeadLetterAsync(lockToken);
Это переместит текущее сообщение в DLQ.
ОТЛИЧНЫЙ!!!Это то, что я хочу.
Но теперь я вынужден что-то вернуть ИЛИ выдать исключение.Есть ли какой-нибудь выход из этого, поскольку наблюдение сообщений об ошибках вводит в заблуждение, поскольку нет ошибок, чтобы следовать.