如何自动使Azure Service Bus订阅上的消息过期?

时间:2013-12-16 10:04:31

标签: azure servicebus brokeredmessage

BrokeredMessage上的文档说:

  

如果发件人在邮件上设置的TTL超过目的地的TTL,则邮件的TTL将被后一个值覆盖。请参阅DefaultMessageTimeToLive,DefaultMessageTimeToLive和DefaultMessageTimeToLive以了解有关如何在实体级别控制消息TTL的更多信息。

因此,要实现从“Log”订阅中自动删除的消息,在创建订阅时,我已将SubscriptionDescription.DefaultMessageTimeToLive属性设置为TimeSpan.FromDays(5)

当我创建并发送代理消息时,将该消息上的TimeToLive属性保留为默认值,当我检查到达该订阅的消息时,消息的ExpiresAtUtc属性为{ {1}}。 31-12-9999 23:59属性为TimetoLive。由于“目标”订阅的TTL为5天,我原本期望值为10675199.02:48:05.4775807

我还需要做些什么才能让它发挥作用吗?

使用Service Bus Explorer 2.2.1.0重现的步骤

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

3 个答案:

答案 0 :(得分:3)

隐藏消息的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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  

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

     

为什么邮件没有从主题中清除?现在显而易见了   问题出现了,是什么让这些成千上万的信息保持在话题中。   经过一番调查,我们发现“默认消息生存时间”   对于主题设置为非常高的数字。在这种情况下,它被设置为1   年。为了解决问题,我们将“默认消息时间”设置为   根据他们的App Developer推荐的“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/