【问题标题】:Does Microsoft's Service Bus replicate message for every subscription in a topic?Microsoft 的服务总线是否为主题中的每个订阅复制消息?
【发布时间】:2016-06-20 07:14:39
【问题描述】:

Azure 服务总线及其本地版本 Service Bus for Windows Server 是否为每个订阅者复制一条消息?

例如,假设有一个主题有五个订阅者,那么该消息是在服务总线的数据库中存储五次 - 每个订阅者一次 - 还是该消息只存储一次,业务逻辑以确定哪个订阅者已阅读消息?

如果有官方网站和/或文档作为参考,那就太好了。

【问题讨论】:

  • 存储很便宜。因此,复制这些消息而不是尝试创建和维护一个极其复杂的逻辑来保持与多个订阅相关联的同步信息是有意义的。想想 DLQ、锁定持续时间、空闲时自动删除、消息 TTL v& 订阅默认 TTL、会话、批处理等。

标签: azure azureservicebus servicebus


【解决方案1】:

Azure 服务总线的行为似乎是为每个订阅者保留一份副本。我通过创建一个包含两个订阅的主题来测试这一点。我发送了一条消息,我看到主题的字节大小为 464(使用 topic.SizeInBytes)。当我收到一条订阅消息时,大小减半至 232。我用三个订阅对其进行了测试,并且发生了相同的行为:696 字节。

即使他们没有为每个订阅保留一份消息副本,他们也会根据主题的最大大小计算消息大小乘以订阅数,这可能是您试图确定的。

我同意如果他们记录该行为会很好,尤其是对于 Windows Server 的服务总线,因为这可能会影响您需要预留的存储量的规划。至于 Azure 服务总线方面,我不确定幕后的实现是否与了解它如何影响主题的最大大小一样重要。

【讨论】:

  • 我不确定这对托管服务有多大帮助。 ASB 作为一种托管服务,它被抽象出来,作为消费者,它与细节无关。对于 WSSB 来说,这可能是另一回事。
  • 我同意肖恩的观点。对于托管的 ASB,这实际上只会影响您需要的主题的最大大小。
【解决方案2】:

对主题的订阅类似于接收 发送到该主题的消息副本。您可以选择 为每个订阅注册一个主题的过滤规则,这 允许您过滤/限制接收到主题的哪些消息 通过哪个主题订阅。

我认为它会复制消息。如果它不复制,它应该总是检查,是否所有订阅者都收到了消息?此外,如果有过滤器,它应该只检查这些订阅者以删除消息。我认为,复制和应用简单的消费实现成本比没有复制成本要低。

Article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多