Phương thức QueueClient.OnMessage có luôn thực hiện tham số gọi lại trên một luồng khác không?Azure ServiceBus QueueClient.OnMessage có thực hiện trên một luồng khác
Tôi giả định rằng nếu MaxConcurrentCalls được đặt thành 10 thì queueClient sẽ quay lên tối đa 10 luồng để xử lý các thư song song. Có một chủ đề mới được tạo ra nếu bạn vượt qua trong một giá trị MaxConcurrentConnection 1 hoặc hiện nó thực hiện trở lại trên thread hiện tại?
Vấn đề thực tế của tôi:
Trong vai trò công nhân Tôi muốn xử lý nhiều hàng đợi nhưng có tất cả quá trình đồng thời. Ví dụ.
_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 });
Điều này có dẫn đến mỗi cuộc gọi lại được thực thi song song để gọi lại _queueClient4 không chờ _queueClient2 hoàn tất trước khi có thể thực thi?
Cảm ơn Abhishek, chỉ cần làm rõ: Nếu tôi gọi OnMessage với MaxConcurrentCalls đặt thành 10 thì 10 chuỗi sẽ được tách ngay lập tức mà chờ cho đến khi tin nhắn có sẵn trên hàng đợi. Sau đó, mỗi luồng xử lý độc lập một thông điệp; mỗi luồng không có sẵn để xử lý bất kỳ tin nhắn nào khác cho đến khi nó trở về? –
Chủ đề chỉ được tách ra khi có thông báo để xử lý. Chỉ có một cuộc gọi nhận đang chờ xử lý và gọi các cuộc gọi lại đồng thời trên các luồng khác nhau cho các thư đã nhận cho đến khi đạt đến số lượng MaxConcurrentCalls. –
FWIW - Phản ánh vào mã, giá trị mặc định cho điều này là 1, do đó, theo mặc định có vẻ như mẫu OnMessage sẽ chỉ chạy trên một chuỗi duy nhất tại một thời điểm. – ProVega