3

問題:

Azure Storage Queueからメッセージを読み取り、ワーカーロールを使用してそれらをストレージテーブルに挿入しています。

メッセージを読み込みたいのですが、少なくとも100個ある場合にのみメッセージを処理します(これは、発生しているストレージテーブルのバッチ挿入を最適化するためです)。メッセージが100未満の場合は、メッセージ処理をキャンセルして、次のキューの読み取りのためにすぐにキューに再び表示されるようにします。

質問:

CloudQueue.GetMessages(...)タイムアウトの期限が切れるのを待たずに、読んだばかりのメッセージを表示済みとしてマークすることは可能ですか?

コード: (WorkerRole.cs内)

public override void Run()
{
    while (true)
    {
        var messages = queue.GetMessages(100);

        if (messages.Count() >= 100)
        {
            // This will process, insert into a table, and delete from the queue
            ProcessMessages(messages);
        }
        else
        {
            //!!! MARK MESSAGES AS VISIBLE ON THE QUEUE
            System.Threading.Thread.Sleep(1000);
        }
    }
}

ありがとう

4

2 に答える 2

2

キューの`ExplicitMessageCount'プロパティ(詳細はこちら)を確認できます。これにより、キューで待機しているメッセージの数を大まかに把握できます。

また、メッセージの非表示タイムアウトを小さな値(おそらく5〜10秒?)に設定できます。その期間が経過すると、メッセージが再び表示されます。読んだ後、不可視タイムアウトをもっと短いものに変更することもできます。

メッセージの更新(不可視性タイムアウトの更新など)と同様に、キューからの読み取りはトランザクションとしてカウントされることを覚えておいてください。

100個のメッセージを待つことは、最適ではない可能性があります。ああ、そしてGetMessages()(詳細はこちら)32メッセージに制限されているので、100を待つのは意味がありません。また:トランザクションは本当に本当に安いです(100Kトランザクションあたり1ペニー)。ここに値が表示されるとは限りません。

于 2013-03-13T12:04:15.430 に答える
0

有効期限を0.0にリセットします。うまくいけば、それはトリックを行うでしょう。

于 2013-03-13T12:02:27.303 に答える