Надявам се по-долу да обясни проблема ми.
Имам работна роля, която работи в цикъл while(true). Този работник взема съобщения от опашка и ги обработва. Никога не завършва, просто продължава да проверява опашка и да обработва съобщения.
Това работи, докато не получа съобщение, което изисква от мен да направя нещо, което отнема време. Пример може да бъде искане на информация от услуга. Хипотетично нека кажем, че тази заявка отнема 10 секунди. Сега моята работна роля е в средата на цикъла ми while в очакване на този отговор. Междувременно опашката със съобщения се запълва.
Това, което искам, е решение, което или ще спре, или ще смекчи това да се случи.
Текущото ми решение в реалния свят е, че имам работна роля, която използва библиотеката за паралелни задачи, за да създаде няколко процесора за съобщения, които работят паралелно и вземат от опашката. Но все пак този проблем може да възникне, ако всички нишки, изпълняващи моите процесори за съобщения, блокират в очакване на услуга.
Знам, че трябва да използвам async заявки за услуги, но има и други примери, при които async няма да помогне. Предпочитам да не навлизам в подробности.
Така че планът ми в момента е да променя текущата си архитектура и да създам услуга за обработка на съобщения. Така че ще използвам опашката със съобщения в текущото решение и ще използвам само работната роля, за да делегирам работата на моята уеб услуга (асинхронно).
Тази работна роля вече няма да има ситуация на нишки, заседнали в очакване на нещо.
Но не съм доволен от това. Ами ако моята работна роля, която използва паралелната библиотека на задачите за създаване на няколко процесора за опашка, не е достатъчно бърза. Не мисля, че процесорът дори ще натовари, защото забавянето ще бъде при извличането на съобщението и изпращането му до уеб услуга, като и двете не натоварват процесора.
Така че имам нужда от ПОВЕЧЕ процесори за опашка, които ще трябва да бъдат създадени чрез създаване на екземпляри на моя процесор за опашка въз основа на това колко заета е моята опашка. Така че, когато опашката има много елементи в нея, Azure ще създаде нов екземпляр, за да ми помогне да ги обработя.
Не съм уверен в това решение. Чувствам, че това трябва да е по-лесно. Защо сега създавам уеб услуга за използване на съобщения, изпратени от работна роля, която на свой ред се мащабира въз основа на моята опашка за съобщения.
Моето решение има ли смисъл или има алтернативи?