Мне нужно читать и обрабатывать сообщения из очереди служебной шины Azure с помощью «функции Azure». Сообщения должны обрабатываться в правильном порядке, поэтому мне нужно избегать одновременных вызовов.
Для этого я использую триггер служебной шины функции Azure (это единственный подписчик в очереди). В соответствии с документацией я установил для параметра «servicebus / maxConcurrentCalls» (в host.json) значение 1. Кроме того, я украсил функцию атрибутом «Singleton».
Помимо всего этого сообщения, кажется, обрабатываются в случайном порядке различными потоками.
Что мне здесь не хватает? Или я что-то не так понял?
Документация, которую я использовал:
https://github.com/Azure/azure-webjobs-sdk/wiki/Singleton
host.json:
{
"serviceBus": {
"maxConcurrentCalls": 1
}
}
Функция Azure:
using System;
using System.Threading.Tasks;
using Microsoft.ServiceBus.Messaging;
[Singleton]
public static void Run(BrokeredMessage myQueueItem, TraceWriter log)
{
Stream stream = myQueueItem.GetBody<Stream>();
StreamReader reader = new StreamReader(stream);
string messageContentStr = reader.ReadToEnd();
log.Info($"New TEST message: {messageContentStr} on thread {System.Threading.Thread.CurrentThread.ManagedThreadId}");
System.Threading.Thread.Sleep(2000);
}
Вот выдержка из журнала. Как видите, есть разные темы.
И, например, «Сообщение 19» предшествует «Сообщение 10». И да, я уверен, что поставил сообщения в правильном порядке в очереди.
....
2018-05-09T09:09:33.686 [Info] New TEST message: Message 19 on thread 33
2018-05-09T09:09:35.702 [Info] Function completed (Success, Id=007eccd0-b5db-466a-91c1-4f53ec5a7b3a, Duration=2013ms)
2018-05-09T09:09:36.390 [Info] Function started (Id=b7160487-d10d-47a6-bab3-78da68a93498)
2018-05-09T09:09:36.420 [Info] New TEST message: Message 10 on thread 39
...