【问题标题】:Trying to understand Azure Service Bus Sessions尝试了解 Azure 服务总线会话
【发布时间】:2018-05-07 05:43:57
【问题描述】:

所以我试图了解 Azure 服务总线会话 ID,以便在我的队列中创建 FIFO。

我的想法很简单,但我不知道它是否适合 FIFO。

我的想法是在我的队列中创建 FIFO 的这些步骤:

创建:

首先:检查队列中的消息及其会话 ID 并公开 ID 层次结构。

下一步:使用层次结构中最新的 Session-ID 创建新消息,并将该值迭代 1 (+1)

下一步:发送到服务总线队列。

阅读:

首先:检查队列中的消息及其会话 ID 并公开 ID 层次结构。

下一步:读取并删除层次结构中最早的 Session-ID。

下一步:处理...

请记住,我没有包括错误处理,例如读取和删除部分,因为我已经弄清楚了。

所以问题是这是正确的思维方式,而且,我如何在 C# 中实现这一点,我真的找不到直接解释这个概念的东西。

【问题讨论】:

    标签: c# session fifo sessionid azure-servicebus-queues


    【解决方案1】:

    详细说明:

    假设您总共有 9 条队列消息,这些消息被分组为三个会话,会话 ID 为 1、2 和 3。然后将按顺序处理每组 3 条消息(先进先出)。

    但是,如果有多个队列侦听器,个会话之间或在每组消息之间仍然会发生并行性。

    存储所有 9 条消息的队列的每个侦听器/处理器都会锁定共享相同会话 ID 的所有消息,然后一次处理每条消息,直到会话完成(通常是在没有更多消息时在具有该会话 ID 的队列中,除非您关闭自动完成并决定在您认为有必要时手动关闭会话)。

    希望这是有道理的。

    【讨论】:

    • 3 个会话中的哪个会话首先被检索和锁定? (如果听众不超过 1 个)
    • 它将是第一个到达队列的消息引用的会话,因为它是一个先进先出队列。
    【解决方案2】:

    所以我试图了解 Azure 服务总线会话 ID,以便在我的队列中创建 FIFO。

    假设您已经阅读了Message Sessions 上的文档并且没有跳过Microsoft.Azure.ServiceBusWindowsAzure.ServiceBus 的链接示例,您会注意到后一个示例对会话的运行方式进行了广泛的解释。

    您无需“创建” FIFO 队列,您只需将它与会话一起使用,这就是您实现所需内容的方式。会话有它们的用例。其中之一是您的场景,其中您有一个具有单个会话 ID 的无限期会话,以使您的消息保持有序。

    注意:请注意限制(不会影响吞吐量的并行处理)。

    我如何在 C# 中实现这一点我真的找不到能直截了当地解释这个概念的东西。

    较旧的客户端示例通过非常可靠的细分和解释 (WindowsAzure.ServiceBus) 为您的实现相关问题提供了答案。

    【讨论】:

    • 失败的消息在重新处理过程中会记住它们的会话ID吗?
    • 是的。 SessionId 分配给每条消息。
    猜你喜欢
    • 2017-04-25
    • 2012-08-22
    • 2020-10-23
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2023-01-19
    • 2022-10-04
    • 1970-01-01
    相关资源
    最近更新 更多