【问题标题】:Service Bus queue to keep last message服务总线队列以保留最后一条消息
【发布时间】:2016-03-08 21:10:22
【问题描述】:

有没有办法将服务总线队列/订阅配置为只保存最后一条消息,而不管时间长短,丢弃任何旧消息。

这样客户端在每次连接时都会获得最新的“状态”,而不必存储自上次连接以来的所有消息(如果长时间断开连接会导致性能问题)

谢谢, 史蒂夫

【问题讨论】:

  • 你能提供更多细节吗?如果您只想保留 1 条消息,为什么要使用队列?
  • 因为通过使用队列/订阅推送机制,只要有新消息(状态),我就会得到实时更新。目标不是要有一个队列,而是要有一个订阅机制让多个客户端接收实时更新,理想情况下是在连接时获得最新状态。我很欣赏有不同的技术可能更适合于此,或者更多技术的组合。问题是服务总线可以开箱即用地做到这一点

标签: azureservicebus servicebus


【解决方案1】:

Service Bus 没有该功能;一些代理有这样的概念(例如 MQTT 代理中的保留消息),但由于一系列原因,它是一项棘手的功能。其中之一是您会突然将 Queue 变成广播实体,并且结算(完成)的语义必须完全改变。还有一堆潜在的授权问题。谁可以覆盖粘性消息?有发件人吗?

处理此问题的一种简洁方法是将共享状态信息放入一个 Blob 中,当出现未初始化时,每个人都知道会走到该 Blob 中,然后侦听服务总线主题订阅以了解何时有新版本的Blob 信息(如果合适,该信息也可以内联到有效负载中)。

如果您需要知道来自订阅的消息是比您刚刚获取的 Blob 新还是旧,请比较 Blob 时间戳和消息的 EnqueuedTimeUtc 并丢弃陈旧的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2017-11-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多