【问题标题】:Azure Service Bus Sessions - MaxConcurrentSessions vs MaxConcurrentCallsAzure 服务总线会话 - MaxConcurrentSessions 与 MaxConcurrentCalls
【发布时间】:2017-04-25 04:16:11
【问题描述】:

This page 描述了如何使用 Azure 服务总线中的会话将来自同一源的消息分组到同一接收器。

在无会话队列处理器中,我可以控制并行接收的消息数量:

new OnMessageOptions { MaxConcurrentCalls = 10 };

如果我通过这些选项,将不会同时处理超过 10 条消息。

现在,对于会话处理器,选项被替换为

new SessionHandlerOptions { MaxConcurrentSessions = 10 };

不同的意思是同时不超过10个session

我的会话时间相对较长,而且大部分时间都是空闲的,所以我必须将此参数设置为较高的值。不过,我还是想限制并行消息的数量。

这可能是开箱即用的吗?

如果我将MaxConcurrentSessions 设置为int.MaxValue,并行化的实际限制是多少?

【问题讨论】:

    标签: azureservicebus


    【解决方案1】:

    来自文档:

    单个接收器进程可以轻松处理大量并发会话,尤其是在使用严格异步代码编写时;使用回调模型有效地自动处理几十个并发会话。

    如果您有多个长期存在的会话:

    处理大量并发会话(即每个会话仅偶尔接收消息)的策略是让处理程序在一段时间后丢弃会话,并在下一个会话到达时接受会话时再次开始处理。

    【讨论】:

    • 还是不知道怎么选MaxConcurrentSessions。说,我的空闲超时是 1 分钟,每条消息需要 1 秒来处理,我想最多处理 10 条并发消息。然后我不得不将MaxConcurrentSessions 设置为 60*10。但这可能意味着 SB 将同时接受 600 个新会话?
    • MaxConcurrentSessions 设置为 600 确实允许处理多达 600 个会话。一切都取决于这些消息到达的会话。我认为您想要做的是将您的MaxConcurrentSessions 保持在 10 并且一旦您处理了会话的消息,就放弃该会话(如文档所述)。关于你的系统有很多我不知道的,所以无法回答我不知道的问题。为什么有 10 条并发消息,而不是其中之一。此外,测试一下您对工作/空闲时间的假设是否会起作用或导致某些会话“饿死”。
    • 需要限制以避免从队列处理器调用的外部系统过载。我现在正在尝试在处理完每条消息后关闭会话。似乎工作正常,但我猜这会导致同一会话的所有预取消息返回到队列并标记为不成功,直到下一次重试。我想我将不得不做“超时”的事情,但是我又回到了限制会话数与消息数的问题。
    猜你喜欢
    • 2012-08-22
    • 2020-10-23
    • 2018-05-07
    • 1970-01-01
    • 2019-06-03
    • 2021-01-10
    • 2021-12-19
    • 2022-06-11
    • 2021-12-25
    相关资源
    最近更新 更多