Функция Azure читает сообщение очереди дважды из служебной шины - PullRequest
0 голосов
/ 24 октября 2018

У меня возникает странная проблема, когда я устанавливаю свои функции Azure C # на портале.

В настоящее время у меня есть план потребления с 3 функциями C #.Каждая из функций реагирует на триггер очереди служебной шины, каждая из которых имеет свою собственную очередь.

Первые функции читают из своей очереди, а затем отправляют 1 сообщение следующей функции.В настоящее время я вижу только одно сообщение в следующей очереди, если отключаю функцию на портале.

enter image description here

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

Журнал второй функции, читающей первое сообщение:

2018-10-24T02: 52: 58.562 [Информация] Функция запущена (Id = fae4c5a0-5df5-47dd-ae8e-76784bc0405e) 2018-10-24T02: 52: 58.562 [Информация] 2018-10-24 02:52: 58.562 +00: 00 [Информация] Push Processor - trackingid: b0cdd010-2301-4fa2-9da8-731dd795e145 - уведомление: 201276 - получено для обработки в enqueuedatetc: 10/24/2018 2:52:58 AM с sequenceNumber: 36, счет доставки: 1

Затем этот вызов заканчивается журналом:

2018-10-24T02: 52: 59.406 [Информация] Функция завершена (Успешно, Id = fae4c5a0-5df5-47dd-ae8e-76784bc0405e, Duration =842мс)

Но затем снова читается то же сообщение:

2018-10-24T02: 52: 59.214 [Информация] Функция запущена (Id = f1d364da-e7be-4e66-b300-4211d7941a2a) 2018-10-24T02: 52: 59.245 [Информация] 2018-10-24 02: 52: 59.234 +00: 00 [Информация] Процессор - trackingid: b0cdd010-2301-4fa2-9da8-731dd795e145- id: 201276 - получено для обработки в enqueuedatetc: 10/24/2018 2:52:59 AM с sequenceNumber: 37, deliverycount: 1

Что я вижу, это то, что порядковый номер является diff длято же сообщение, даже если в очереди отображается только одно сообщение, и в очередь было отправлено только одно сообщение.

Последний журнал вызовов для этого:

2018-10-24T02: 52: 59.417 [Информация] Функция выполнена (Успешно, Id = f1d364da-e7be-4e66-b300-4211d7941a2a, Длительность = 195 мс)

Предпринятые действия:

  1. Пробовал другой план обслуживания приложения потребления
  2. Пробовал другой стандартный план обслуживания приложения
  3. Пробовал другую недавно созданную служебную шину (базовый уровень)

Мы запускаем .net 4.7, используя служебную шину nuget Microsoft.Azure.WebJobs.ServiceBus 2.2.0 для всех функций C #.

Добавление чего-либо в очередь: var brokeredQueueMessage = new BrokeredMessage(message); await QueueClient.Value.SendAsync(brokeredQueueMessage);

Метод запуска функции: [FunctionName("Processor")] public static async Task Run( [ServiceBusTrigger("processorqueue-dev", AccessRights.Manage, Connection = "ServiceBusConnection")] BrokeredMessage myQueueItem, TraceWriter log) {

Может показаться, что это связано с тем, когдаВторая функция отправляет сообщения в другую третью очередь для обработки третьей функцией.На данном этапе я еще не развернул третью функцию.Для отправки в очередь используется асинхронная статическая функция.Он использует BatchSendAsync: await messageSender.SendBatchAsync(batchList);

Если функциям secodn не нужно отправлять сообщения, похоже, он не запускается дважды.

1 Ответ

0 голосов
/ 24 октября 2018

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

Идентификатор сообщения не является уникальным, и вы можете установить один и тот же Идентификатор сообщения для нескольких сообщений.

То, что я вижу, является дубликатомсообщения могут быть отправлены во вторую очередь.Пожалуйста, проверьте, отправляется ли одно и то же сообщение во вторую очередь несколько раз из функций.

Пример кода первой и второй функции будет полезен для предоставления большего понимания.

Вы также можете проверить Входящие сообщения метрика для определения общего количества сообщений, отправленных в очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...