【问题标题】:Difference between Topic DefaultMessageTimeToLive and Subscription DefaultMessageTimeToLive on Azure Service BusAzure 服务总线上的主题 DefaultMessageTimeToLive 和订阅 DefaultMessageTimeToLive 之间的区别
【发布时间】:2013-12-27 19:46:12
【问题描述】:

Azure 服务总线上的 Topic 和关联的 Subscription 都公开了 DefaultMessageTimeToLive 属性;像这样初始化:

if (!NamespaceManager.TopicExists(TopicName))
{
    NamespaceManager.CreateTopic(
        new TopicDescription(TopicName)
            {
                MaxSizeInMegabytes = 5120,
                DefaultMessageTimeToLive = TimeSpan.FromDays(14)
            });
}

if (!NamespaceManager.SubscriptionExists(TopicName, SubscriptionName))
{
    NamespaceManager.CreateSubscription(
        new SubscriptionDescription(TopicName, SubscriptionName)
            {
                LockDuration = TimeSpan.FromMinutes(5),
                DefaultMessageTimeToLive = TimeSpan.FromDays(7),
                EnableDeadLetteringOnMessageExpiration = true
            });
}

两者有什么区别,设置两个 TTL 的目的是什么?此外;如果消息在主题上过期,会发生什么?

【问题讨论】:

    标签: c# azure azureservicebus


    【解决方案1】:

    主题上设置的 TTL 应用于其所有订阅。如果需要,订阅可以有自己的 TT,但它应该小于主题 TTL。应用于订阅的 TTL 应用于发送给它的所有 a 消息,并且消息可以有自己的 TTL,该 TTL 应该再次小于订阅 TTL。 如果消息过期并且订阅上启用了 DeadLettering,过期的消息将被移动到 DeadLetter 队列,否则将被永久删除。

    更多信息来自这里:http://msdn.microsoft.com/en-us/library/windowsazure/hh780749.aspx

    【讨论】:

    • 感谢达纳的回复;但是我知道在主题上你不能设置EnableDeadLetteringOnMessageExpiration,这只能在订阅上设置。这就引出了一个问题;为什么 Topic 有一个 TTL
    • 通过阅读本文档 (msdn.microsoft.com/en-us/library/windowsazure/hh780749.aspx) 我推断它是在主题上设置 TTL 的便捷选项,因为您不必在每个订阅上都设置它,并且过期消息似乎会转到订阅的死信。不过没试过
    • "订阅会从主题继承 TTL,除非它们是使用较小的 TTL 显式创建的。根据是否启用死信,其 TTL 已过期的消息将被移动到订阅相关的 DeadLetterQueue 或将被永久删除。” -- 非常感谢; @Dhana,如果您调整答案以匹配我会将其标记为已接受。
    • 你去吧,答案已更新,因此其他人也可以受益
    猜你喜欢
    • 2016-02-10
    • 2016-12-29
    • 2018-08-27
    • 1970-01-01
    • 2017-10-23
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多