【问题标题】:How can I automatically expire messages on an Azure Service Bus subscription?如何自动使 Azure 服务总线订阅上的消息过期?
【发布时间】:2014-01-03 16:11:59
【问题描述】:

BrokeredMessage 上的文档说:

如果发送者对消息设置的 TTL 超过了目的地的 TTL,则消息的 TTL 将被后面的值覆盖。请参阅 DefaultMessageTimeToLive、DefaultMessageTimeToLive 和 DefaultMessageTimeToLive 了解有关如何在实体级别控制消息 TTL 的更多信息。

所以,为了实现自动从我的“日志”订阅中删除消息,在创建订阅时,我将SubscriptionDescription.DefaultMessageTimeToLive 属性设置为TimeSpan.FromDays(5)

当我创建并发送代理消息时,将该消息上的TimeToLive 属性保留为默认值,当我检查到达该订阅的消息时,消息的ExpiresAtUtc 属性为31-12-9999 23:59TimetoLive 属性是 10675199.02:48:05.4775807。由于“目标”订阅的 TTL 为 5 天,我预计那里的值 5.00:00:00

我还需要做些什么才能让它工作吗?

使用 Service Bus Explorer 2.2.1.0 重现的步骤

  1. 连接到 Azure 上的服务总线命名空间
  2. 创建一个新主题“MyTopic”
  3. 在主题下创建订阅“日志”并将默认消息时间设置为 5 天。
  4. 右键单击 MyTopic 主题节点并选择“发送消息”
  5. 在“向 MyTopic 发送消息”屏幕上:单击“开始”
  6. 点击“日志”订阅节点
  7. 点击“消息”按钮并选择Peek 10
  8. 点击列表中的消息
  9. 查看“消息属性”区域中的 TimeToLive 字段

【问题讨论】:

  • 您可以使用这个工具来验证您在订阅时设置的TTL是否真的被应用或其他一些问题code.msdn.microsoft.com/windowsazure/…
  • @DhanaKrishnasamy:我已经准备好使用该工具了。它显示订阅已将“默认消息生存时间”设置为 5 天。它还显示该订阅中的消息(使用 Peek)都将“TimeToLive”设置为 10675199.02:48:05.4775807
  • 贴出代码和截图可能会帮助您快速回答
  • 我在我的问题中添加了“使用 Service Bus Explorer 2.2.1.0 重现的步骤”。希望这可以澄清情况。
  • 我收到消息时的 ttl 为 5

标签: azure servicebus brokeredmessage


【解决方案1】:

显然 peeked 消息的 TTL 值毫无意义:

此行为目前是设计使然,应该独立于 SDK 版本:有效 TTL 是消息和实体的最小 TTL,并在运行时检查,而不是在入队时印在消息上(因为实体级别TTL 可以在消息入队后随时更改)。该文档具有误导性,应予以修复。

这个答案是在这个 MSDN 线程上给出的:http://social.msdn.microsoft.com/Forums/windowsazure/en-US/dfe58dbb-186d-4c71-a708-8f6f7267b451/when-peeking-for-messages-the-time-to-live-value-seems-not-to-be-set-is-this-a-bug

【讨论】:

    【解决方案2】:

    您必须在创建队列本身而不是在创建队列客户端时设置 DefaultMessageTimeToLive 属性。尝试删除队列并使用新的队列描述重新创建它。

    【讨论】:

    • 你描述的就是我已经做过的。我设置了SubscriptionDescription.DefaultMessageTimeToLive 值,然后创建了订阅。当我使用 Service Bus Explorer 查看订阅详细信息时,我看到了我的设置。我只是没有被申请。
    【解决方案3】:

    您需要登录您的主题并将“默认消息生存时间”设置为 14 天。

    出了什么问题?幸运的是,这个错误是不言自明的,并且 表示最大主题大小为 1 GB(1073741824 字节),而 该主题已使用 1073742326 字节,转换为 大约 1 GB 的限制。我们登录到 Azure 门户并验证了 相同的。接下来我们运行 Service Bus Explorer 来检查 消息。我们看到主题中有数千条消息。

    为什么没有从主题中清除消息?现在很明显 问题出现了,是什么让这些成千上万的消息保持在主题中。 经过一番调查,我们发现“默认消息生存时间” 主题设置为非常高的数字。在这种情况下,它被设置为 1 年。为了解决这个问题,我们将“默认消息时间”设置为 根据他们的应用程序开发人员的建议,“活”到 2 天。这 解决了这个问题。这是配置的屏幕截图 Azure 管理门户:

    见: https://blogs.msdn.microsoft.com/cie/2013/07/21/service-bus-error-the-maximum-entity-size-has-been-reached-or-exceeded-for-topic/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-12
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2020-07-06
      • 2014-04-20
      相关资源
      最近更新 更多