【发布时间】:2013-06-06 20:21:05
【问题描述】:
我试图找出设置 AutoDeleteOnIdle 时的正确行为。我有一个名为 MyGameMessages 的主题(不透露游戏名称,因为它可能被视为广告)。
我所做的是在服务器场中的每个节点上创建订阅。
var manager = GetNameSpaceManager();
_subscriptionId = Guid.NewGuid().ToString();
var description = new SubscriptionDescription(topic, _subscriptionId);
description.AutoDeleteOnIdle = TimeSpan.FromHours(1);
manager.CreateSubscription(description);
然后我启动一个几乎永远循环的线程(或至少直到发出退出信号)
while(_running)
{
if (_subscriptionId == null)
break;
var message = client.Receive(TimeSpan.FromMinutes(1)); // MARK A
if (message != null)
{
var body = message.GetBody<T>();
// Do stuff with message
message.Complete();
}
}
问题 A:
第一个实现在 MARK A 处没有超时。如果在一小时内没有向该主题发送消息,则订阅被自动删除。这是预期的行为吗?客户并没有真正死去,但我想它只是坐在那里等待消息。没有保命吗?
问题 B:
在 MARK A 中添加超时是否有帮助,还是每 50 分钟创建一个新订阅(以创建一个小的重叠以防万一)并放弃旧订阅是更好的解决方案?
谢谢
约翰
【问题讨论】:
标签: azure azureservicebus