azure - Azure ServiceBus QueueClient.OnMessage 是否在不同的线程上执行

标签 azure azureservicebus

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 完成才能执行?

最佳答案

当您使用 OnMessage 注册回调时,它将在不同的线程上调用。如果您将 MaxConcurrentCalls 设置为 10,那么我们将为 10 条消息创建 10 个线程,并同时为每条消息回调所有这些线程。您也可以跨队列执行此操作,如上面所示,但当然每个单独的回调处理之间没有同步或排序。

当我们在新线程上调用回调时,该特定执行/消息是同步的,因为直到方法完成或引发异常,消息处理才完成。如果 MaxConcurrentCalls 为 0,则只会为每个注册的回调处理一个线程。但是,当您有不同的 QueueClient 实例时,您可以向它们注册不同的回调或具有不同并发计数的相同回调等。

关于azure - Azure ServiceBus QueueClient.OnMessage 是否在不同的线程上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18255323/

相关文章:

Azure函数应用程序: Can I put maxConcurrentSessions settings in Application settings Configuration like service bus configuration

azure - 通知中心未授权异常 : Unauthorized on Azure Notification Hub registration

javascript - Azure 服务总线计划消息 "in"绑定(bind)未定义

python - 如何选择合适的 openai.api_version?

azure - 关于云计算做什么有什么想法吗?

azure - 在本地测试 Azure 服务总线,无需任何订阅或登录

c# - Azure 服务总线规则名称最大长度

azure - 使用专用终结点部署到 Azure Web App

Azure 应用程序网关 - 多个 SSL 证书?

azure - 您可以从 Visual Studio Mac 创建 Azure Functions 吗?