1

BrokeredMessage 上的文档说:

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

因此,为了实现从我的“日志”订阅中自动删除消息,在创建订阅时,我将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. 单击“消息”按钮并选择Peek 10
  8. 单击列表中的消息
  9. 查看“消息属性”区域中的 TimeToLive 字段
4

3 回答 3

4

显然,偷看消息的 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

于 2014-01-08T09:27:16.890 回答
0

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

于 2013-12-16T14:29:50.657 回答
0

您需要登录您的主题并将“默认消息生存时间”设置为 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/

于 2016-10-10T12:28:50.167 回答