У меня возникает странная проблема, когда я устанавливаю свои функции Azure C # на портале.
В настоящее время у меня есть план потребления с 3 функциями C #.Каждая из функций реагирует на триггер очереди служебной шины, каждая из которых имеет свою собственную очередь.
Первые функции читают из своей очереди, а затем отправляют 1 сообщение следующей функции.В настоящее время я вижу только одно сообщение в следующей очереди, если отключаю функцию на портале.
Вторая функция читает сообщение из очередии затем начинает обрабатывать его.Затем журнал завершается, но второй экземпляр того же сообщения затем читается из очереди, и функция пытается его обработать.
Журнал второй функции, читающей первое сообщение:
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 мс)
Предпринятые действия:
- Пробовал другой план обслуживания приложения потребления
- Пробовал другой стандартный план обслуживания приложения
- Пробовал другую недавно созданную служебную шину (базовый уровень)
Мы запускаем .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 не нужно отправлять сообщения, похоже, он не запускается дважды.