QueueClient.OnMessage 메서드는 항상 다른 스레드에서 콜백 매개 변수를 실행합니까?Azure ServiceBus QueueClient.OnMessage가 다른 스레드에서 실행됩니까
MaxConcurrentCalls를 10으로 설정하면 queueClient가 메시지를 병렬로 처리하기 위해 최대 10 개의 스핀을 돌릴 것이라고 가정합니다. MaxConcurrentConnection 값을 1로 전달하거나 현재 스레드에서 다시 실행하면 새 스레드가 생성됩니까?
실제 문제 :
작업자 역할 내에서 여러 큐를 처리하고 싶지만 모든 프로세스를 동시에 처리해야합니다. 예 :
_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 });
각 콜백이 결과가 병렬로 실행되는겠습니까 _queueClient4 콜백은 실행 전에 _queueClient2 완료를 기다리지 않도록?
감사의 말 : 명확히하기 위해 : MaxConcurrentCalls를 10으로 설정하고 OnMessage를 호출하면 10 개의 스레드가 즉시 스핀 업됩니다. 대기열에서 메시지를 사용할 수있을 때까지 대기합니다. 그런 다음 각 스레드는 독립적으로 메시지를 처리합니다. 각 스레드는 콜백이 반환 될 때까지 다른 메시지를 처리 할 수 없습니다. –
처리 할 메시지가있을 때만 스레드가 회전됩니다. 대기중인 Receive 호출은 하나 뿐이며 MaxConcurrentCalls 수에 도달 할 때까지받은 메시지에 대해 다른 스레드에서 콜백을 동시에 호출합니다. –
FWIW -이 코드의 기본값은 1입니다. 따라서 기본적으로 OnMessage 패턴은 한 번에 하나의 스레드에서만 실행됩니다. – ProVega