我刚读过这篇文章:
关于Express queues and topics
发现了一个有趣的观点:
Express实体可实现高吞吐量和减少延迟的方案。对于快递实体,如果消息 已发送到某个队列或主题,则不会立即存储在消息存储库中。相反,消息缓存在内存中。如果消息在队列中保留超过几秒钟,则会自动将其写入稳定存储,从而防止其因中断而丢失。将消息写入内存高速缓存可提高吞吐量并减少延迟,因为在发送消息时无法访问稳定存储。几秒钟内消耗的消息不会写入消息传递存储。以下示例创建了一个明确的主题。
TopicDescription td = new TopicDescription(TopicName);
td.EnableExpress = true;
namespaceManager.CreateTopic(td);
如果包含不得丢失的关键信息的消息发送到快递实体,则发件人可以通过将 ForcePersistence 属性设置为true来强制Service Bus立即将消息保留到稳定存储。
如果我创建的快速队列只有一个发件人且发件人发送BrokeredMessage
属性ForcePersistence = true
,是否有兴趣创建Express队列?
我想这没用,但是真的不明白它是如何工作的......
任何澄清都赞赏^^
答案 0 :(得分:2)
在某些情况下,您希望一般都有快递消息,并且您不关心商店是否崩溃并且它们已经消失(例如股票更新)。但是有些消息类型太重要了,不能丢失。您无法将消息标记为快递。由于队列描述指示队列是否表达,因此在处理缓存和数据存储中崩溃时不应丢失的消息时,您需要强制执行持久性标志。当您具有较高的消息量和每毫秒的延迟计数时,这非常方便。
几秒钟内消耗的消息不会写入数据库。发送,接收和完成操作执行得更快,因为这些操作只会修改消息缓存。
答案 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进行配置。