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 でタイムアウトがありませんでした。1 時間以内にこのトピックにメッセージが送信されない場合、サブスクリプションは自動削除されました。これは期待される動作ですか?クライアントは実際には死んでいませんが、メッセージを待っているだけだと思います。キープアライブはありませんか?
質問 B:
MARK A のようにタイムアウトを追加することは役に立ちますか、それとも 50 分ごとに新しいサブスクリプションを作成し (念のために小さなオーバーラップを作成するため)、古いサブスクリプションを破棄する方が良い解決策ですか?
ありがとう
ヨハン