PeekBatch 方法
TOC
摺疊目錄
展開目錄
本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

QueueClient.PeekBatch 方法

 

查看一批訊息。

命名空間:   Microsoft.ServiceBus.Messaging
組件:  Microsoft.ServiceBus (在 Microsoft.ServiceBus.dll 中)

名稱描述
System_CAPS_pubmethodPeekBatch(Int32)

查看一批訊息。

System_CAPS_pubmethodPeekBatch(Int64, Int32)

查看一批訊息。

每個用戶端執行個體快取的最後一個序號,並明確指出,除非使用該序號來查看下一個訊息。 例如,如果您查看佇列中的所有訊息 (批次,提供 fromSequenceNumber 參數),然後都查看與任何參數,此方法傳回任何訊息。

PeekBatch 不一定會傳回所指定的訊息數目 MessageCount 屬性 有兩個可能的原因。 其中一個原因是集合的訊息彙總的大小超過 256 KB 的大小上限。 另一個原因是,如果佇列或主題已 EnablePartitioning 屬性 設為 true, ,資料分割可能沒有足夠的訊息,以完成要求的訊息數目。 一般而言,如果應用程式想要接收特定數目的訊息,它應該呼叫 PeekBatch 重複直到到達該數目的訊息,或沒有查看更多的郵件。

下列範例顯示如何使用 PeekBatch 方法來取得特定數目的訊息,以及如何使用 PeekBatch 接收所有訊息。 若要從頭開始, fromSequenceNumber 參數應該設定為 0。

static async Task<IEnumerable<BrokeredMessage>> PeekAllAsync(QueueClient qc, long fromSequenceNumber)
{
    const int batchSize = 100;
    List<BrokeredMessage> messages = new List<BrokeredMessage>();

    var peekedMessages = await qc.PeekBatchAsync(fromSequenceNumber, batchSize);
    bool hasMessages = peekedMessages != null && peekedMessages.Any();
   if (hasMessages)
    {
        messages.AddRange(peekedMessages);
    }

    while (hasMessages)
    {
        peekedMessages = await qc.PeekBatchAsync(batchSize);
        hasMessages = peekedMessages != null && peekedMessages.Any();
        if (hasMessages)
        {
            messages.AddRange(peekedMessages);
        }
    } 

    return messages;
}
static async Task<IEnumerable<BrokeredMessage>> PeekBatchAsync(QueueClient qc, int fromSequenceNumber, int messageCount)
{
    List<BrokeredMessage> messages = new List<BrokeredMessage>();

    var peekedMessages = await qc.PeekBatchAsync(fromSequenceNumber, messageCount);
    bool hasMessages = peekedMessages != null && peekedMessages.Any();
    if (hasMessages)
    {
        messages.AddRange(peekedMessages);
    }

    while (hasMessages && messages.Count < messageCount)
    {
        peekedMessages = await qc.PeekBatchAsync(messageCount - messages.Count);
        hasMessages = peekedMessages != null && peekedMessages.Any();
        if (hasMessages)
        {
            messages.AddRange(peekedMessages);
        }
    } 

    return messages;
}
static IEnumerable<BrokeredMessage> PeekAll(QueueClient qc, long fromSequenceNumber)
{
    const int batchSize = 100;

    var peekedMessages = qc.PeekBatch(fromSequenceNumber, batchSize);
    bool hasMessages = peekedMessages != null && peekedMessages.Any();
    if (hasMessages)
    {
        foreach (var peekedMessage in peekedMessages)
        {
            yield return peekedMessage;
        }
    }

    while (hasMessages)
    {
        peekedMessages = qc.PeekBatch(batchSize);
        hasMessages = peekedMessages != null && peekedMessages.Any();
        if (hasMessages)
        {
            foreach (var peekedMessage in peekedMessages)
            {
                yield return peekedMessage;
            }
        }
    }
}

static IEnumerable<BrokeredMessage> PeekBatch(QueueClient qc, int fromSequenceNumber, int messageCount)
{
    int peekedMessageCount = 0;
    var peekedMessages = qc.PeekBatch(fromSequenceNumber, messageCount);
    bool hasMessages = peekedMessages != null && peekedMessages.Any();
    if (hasMessages)
    {
        foreach (var peekedMessage in peekedMessages)
        {
            peekedMessageCount++;
            yield return peekedMessage;
        }
    }

    while (hasMessages && peekedMessageCount < messageCount)
    {
        peekedMessages = qc.PeekBatch(messageCount - peekedMessageCount);
        hasMessages = peekedMessages != null && peekedMessages.Any();
        if (hasMessages)
        {
            foreach (var peekedMessage in peekedMessages)
            {
                peekedMessageCount++;
                yield return peekedMessage;
            }
        }
    }
}

回到頁首
顯示:
© 2016 Microsoft