2

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 分ごとに新しいサブスクリプションを作成し (念のために小さなオーバーラップを作成するため)、古いサブスクリプションを破棄する方が良い解決策ですか?

ありがとう

ヨハン

4

1 に答える 1

2

Johan さん、あなたが上で説明したシナリオは、あなたの期待どおりに機能するはずです。保留中の受信呼び出しは、メッセージが流れていなくてもサブスクリプションを維持します。受信に長いタイムアウトを使用すると、メッセージ量が少ないときにチャットの多いトラフィックが発生しないため、より良い結果が得られます。確認すべきことの 1 つは、トピックの値を設定しているかどうかです。AutoDeleteOnIdleその場合、サブスクリプションで受信してもトピックは維持されず、1 時間メッセージがトピックに送信されない場合、トピックは削除されます。トピックを削除すると、すべてのサブスクリプションも削除されます。

サブスクリプションが削除されるというこの動作がまだ見られますか? その場合は、Azure ライブ サイト サポートでチケットを作成し、製品チームが詳細を調査してください。

于 2013-06-08T01:20:58.043 に答える