【问题标题】:Azure Service Bus - Express queues and topics explanationsAzure 服务总线 - 快速队列和主题说明
【发布时间】:2019-03-27 21:44:00
【问题描述】:

我刚刚读了这篇文章:

发现了一个关于Express queues and topics的有趣点:

快速实体可实现高吞吐量和减少延迟的场景。对于 express 实体,如果 消息 发送 到队列或主题,则它不会立即存储在消息存储中。相反,消息被缓存在内存中。如果消息在队列中停留超过几秒钟,它会自动写入稳定的存储,从而保护它不会因中断而丢失。将消息写入内存缓存会增加吞吐量并减少延迟,因为在发送消息时无法访问稳定的存储。在几秒钟内使用的消息不会写入消息存储。以下示例创建了一个 express 主题。

TopicDescription td = new TopicDescription(TopicName);
td.EnableExpress = true;
namespaceManager.CreateTopic(td);

如果将包含不能丢失的关键信息的消息发送到快递实体,发送者可以通过将 ForcePersistence 属性设置为 true 来强制服务总线立即将消息持久保存到稳定存储中。

如果我创建一个只有一个发件人的快递队列,并且发件人发送BrokeredMessage 属性为ForcePersistence = true,是否有兴趣创建一个快递队列?

我猜这没什么用,但不太明白它是如何工作的......

感谢任何澄清^^

【问题讨论】:

    标签: azureservicebus


    【解决方案1】:

    在某些情况下,您通常希望收到快速消息,而您不在乎商店是否崩溃并且它们消失了(例如库存更新)。但是有些消息类型太重要了,不能丢失。您不能将邮件标记为特快。由于队列描述指示队列是否为 express,因此在处理如果缓存和数据存储崩溃时不应丢失的消息时,您需要强制使用持久性标志。当您的消息量很大并且每毫秒的延迟都很重要时,这非常方便。

    official documentation 解释说:

    几秒钟内消费的消息不会写入数据库。发送、接收和完成操作执行得更快,因为这些操作只修改消息缓存。

    【讨论】:

      【解决方案2】:

      Express Entities(如服务总线队列和主题)只能在标准层中创建。 在 Premium 命名空间中创建的实体不支持 express 选项。发送到 express 实体的消息被缓存在内存中,而不是立即存储在消息存储中。如果消息持续超过几秒钟,则它们将被写入消息存储。因此,只有在该实体接收到消息的几秒钟内未收到消息时,才会将消息写入消息存储。

      消息的

      强制持久化属性决定消息是否立即持久化到数据库中,而不是在内存中短时间保存。如果消息被发送到非快速队列或主题,则忽略此属性。请参阅此link 以了解有关强制持久性属性的更多信息。

      因此,当需要高吞吐量和减少延迟时,可以使用 express 实体。请参阅此link 了解更多信息

      【讨论】:

        【解决方案3】:

        最近几天,我不得不继续对 SB 进行一些调查。

        过去,此选项帮助我提高吞吐量。但是基于this recent commit in GH,关于快递实体的建议已在标题下删除:“删除过时的性能建议”

        不过,它似乎还可以通过 ARM 和/或 AZ-CLI 2.0 进行配置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-19
          • 2020-10-08
          • 1970-01-01
          • 2017-02-25
          • 1970-01-01
          • 2021-11-17
          • 2015-07-18
          • 2021-12-30
          相关资源
          最近更新 更多