Azure Service Bus - 快速队列和主题说明

时间:2016-02-22 08:32:16

标签: azureservicebus

我刚读过这篇文章:

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

  

Express实体可实现高吞吐量和减少延迟的方案。对于快递实体,如果消息 已发送到某个队列或主题,则不会立即存储在消息存储库中。相反,消息缓存在内存中。如果消息在队列中保留超过几秒钟,则会自动将其写入稳定存储,从而防止其因中断而丢失。将消息写入内存高速缓存可提高吞吐量并减少延迟,因为在发送消息时无法访问稳定存储。几秒钟内消耗的消息不会写入消息传递存储。以下示例创建了一个明确的主题。

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

如果包含不得丢失的关键信息的消息发送到快递实体,则发件人可以通过将 ForcePersistence 属性设置为true来强制Service Bus立即将消息保留到稳定存储。

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

我想这没用,但是真的不明白它是如何工作的......

任何澄清都赞赏^^

3 个答案:

答案 0 :(得分:2)

在某些情况下,您希望一般都有快递消息,并且您不关心商店是否崩溃并且它们已经消失(例如股票更新)。但是有些消息类型太重要了,不能丢失。您无法将消息标记为快递。由于队列描述指示队列是否表达,因此在处理缓存和数据存储中崩溃时不应丢失的消息时,您需要强制执行持久性标志。当您具有较高的消息量和每毫秒的延迟计数时,这非常方便。

official documentation解释说:

  

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

答案 1 :(得分:1)

  只能在标准层中创建

Express实体,例如Service Bus队列和主题。   在Premium名称空间中创建的实体不支持express选项。发送到快速实体的消息被缓存在内存中,而不是立即将它们存储在消息存储中。如果消息持续存在超过几秒钟,那么它们将被写入消息存储。因此,仅当在几秒钟之内未收到该实体接收到的消息时,消息才会被写入消息存储。

     消息的

Force persistence 属性决定消息是否要立即保留到数据库中,而不是短时间保留在内存中。如果将消息发送到非表达队列或主题,则将忽略此属性。请参阅此link,以了解有关Force Persistence属性的更多信息。

因此,在需要高吞吐量和减少延迟的情况下,可以使用快递实体。请参阅此link了解更多信息

答案 2 :(得分:0)

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

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

但是似乎仍可以通过ARM和/或AZ-CLI 2.0进行配置。