[英]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重现的步骤
在偷看的消息上使用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.