繁体   English   中英

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

[英]How can I automatically expire messages on an Azure Service Bus subscription?

BrokeredMessage上的文档说:

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

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

当我创建并发送代理消息时,将该消息上的TimeToLive属性保留为默认值,当我检查到达该订阅的消息时,消息的ExpiresAtUtc属性为31-12-9999 23:59 TimetoLive属性是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. 点击“信息”按钮,然后选择皮克 10
  8. 单击列表中的消息
  9. 查看“消息属性”区域中的TimeToLive字段

在偷看的消息上使用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-活的价值似乎-不是将要设置的,是-这-A-错误

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

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

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

为什么消息没有从主题中清除? 现在出现了一个显而易见的问题,那就是在主题中保留数以千计的信息。 经过一番调查后,我们发现Topic的“默认消息生存时间”被设置为非常高的数字。 在这种情况下,它被设定为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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM