Dan*_*nds 10 azure azureservicebus
QueueClient.OnMessage方法是否总是在不同的线程上执行回调参数?
我假设如果MaxConcurrentCalls设置为10,那么queueClient将最多启动10个线程来并行处理消息.如果传入MaxConcurrentConnection值为1或者它是否在当前线程上执行,是否会创建新线程?
我的实际问题:
在一个Worker角色中我想处理多个队列,但是它们都会同时处理.例如
_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 });
Run Code Online (Sandbox Code Playgroud)
这是否会导致每个回调并行执行,以便_queueClient4回调不等待_queueClient2完成才能执行?
Abh*_*Lal 10
当您使用OnMessage它注册回调时,将在另一个线程上调用它.如果设置MaxConcurrentCalls为10,那么我们将为10条消息创建10个线程,并同时为每条消息回调所有这些消息.您可以在上面显示的队列中执行此操作,但当然在每个单独的回调处理之间没有完成同步或排序.
当我们在新线程上调用回调时,它对于该特定执行/消息是同步的,直到该方法完成或抛出异常,消息处理未完成.如果MaxConcurrentCalls为0,那么对于每个注册的回调,只会处理一个线程.但是,当您有不同的QueueClient实例时,您可以向它们注册不同的回调,或者使用不同的并发计数等注册相同的回调.
| 归档时间: |
|
| 查看次数: |
6451 次 |
| 最近记录: |