Czy metoda QueueClient.OnMessage zawsze wykonuje parametr wywołania zwrotnego w innym wątku?Czy kolejka Azure ServiceBus QueueClient.OnMessage jest uruchamiana w innym wątku
Zakładam, że jeśli MaxConcurrentCalls jest ustawiony na 10, to queueClient będzie rozpędzać maksymalnie 10 wątków, aby przetwarzać komunikaty równolegle. Czy nowy wątek zostanie utworzony, jeśli przekażesz wartość MaxConcurrentConnection równą 1 lub czy zostanie ona ponownie uruchomiona w bieżącym wątku?
Mój rzeczywisty problem:
W ramach roli pracownika chciałbym obsłużyć wiele kolejek, ale wszystkie je współbieżnie. Na przykład.
_queueClient1.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1});
_queueClient2.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1 });
_queueClient3.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1 });
_queueClient4.OnMessage(x =>
{
// Do something
}, new OnMessageOptions { MaxConcurrentCalls = 1 });
doprowadziłoby to do każdego zwrotnego wykonywane równolegle tak, że zwrotna _queueClient4 nie czeka na _queueClient2 aby zakończyć, zanim będzie można go wykonać?
Dzięki Abhishek, tylko po to, aby wyjaśnić: jeśli zadzwonię do OnMessage przy MaxConcurrentCalls ustawionym na 10, 10 wątków zostanie natychmiast odwirowanych które czekają, aż komunikaty będą dostępne w kolejce. Następnie każdy wątek niezależnie przetwarza komunikat; każdy wątek jest niedostępny do przetwarzania innych komunikatów, dopóki nie zostanie zwrócone wywołanie zwrotne? –
Wątki są odwirowywane tylko wtedy, gdy są komunikaty do przetworzenia. Istnieje tylko jedno oczekujące wywołanie Receive, które wywołuje jednocześnie wywołania zwrotne dla różnych wątków dla otrzymanych wiadomości, aż do osiągnięcia liczby MaxConcurrentCalls. –
FWIW - Odbijając kod, domyślna wartość to 1, więc domyślnie wygląda na to, że wzorzec OnMessage będzie działał tylko na pojedynczym wątku naraz. – ProVega