Приложение-функция Azure, сервисная шина и сервисная шина - PullRequest
0 голосов
/ 01 мая 2019

У меня есть функция 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.

ОТЛИЧНЫЙ!!!Это то, что я хочу.

Но теперь я вынужден что-то вернуть ИЛИ выдать исключение.Есть ли какой-нибудь выход из этого, поскольку наблюдение сообщений об ошибках вводит в заблуждение, поскольку нет ошибок, чтобы следовать.

1 Ответ

0 голосов
/ 05 мая 2019

Насколько я вижу, кажется, что вам не следует использовать привязку к шине автоматического возврата.Вместо этого вам следует вручную подключиться к возвращаемой теме / очереди и вручную обработать логистику сообщений.

...