2
我們使用Azure服務總線隊列,並使用AcceptMessageSession(以下代碼)接收消息。服務總線MessageSession已接受,但接收返回null
接受MessageSession成功,但是當我在MessageSession上調用Receive時,返回null。
這不會一直髮生,而是會在創建隊列後的一段時間內發生。當發生這種情況時,我證實隊列不是空的。 當我關閉MessageSession我看到我的隊列縮短(!以正確的數量的消息),但我還沒有收到我的消息......
的代碼我使用:
public IEnumerable<T> ReceiveBatch<T>(TimeSpan waitTime)
{
MessageSession sessionReceiver = null;
IEnumerable<T> retval;
QueueClient queueClient = GetQueueClient<T>();
try
{
sessionReceiver = queueClient.AcceptMessageSession(waitTime);
retval = ReceiveSessionMessages<T>(sessionReceiver);
}
finally
{
if (sessionReceiver != null) sessionReceiver.Close();
}
return retval;
}
private IEnumerable<T> ReceiveSessionMessages<T>(MessageSession receiver)
{
receiver.PrefetchCount = 10;
BrokeredMessage message;
var retval = new List<T>();
while ((message = receiver.Receive()) != null)
{
var item = message.GetBody<T>();
if (!Equals(item, default(T))) retval.Add(item);
}
return retval;
}
UPDATE:
我有一個懷疑,雖然某些會話的所有消息都已過期,但會話本身仍然存在,因此它被接受但沒有收到消息。
感謝您的建議,我最初確實使用了RecieveBatch,它的工作方式與我沒有使用PrefetchCount集的情況相同。 TTL不是問題,deadlettering被打開,並且只有一個接收器。 – Ronnyle 2013-05-14 05:00:03
你確定在GetBody調用中沒有錯誤嗎? – 2013-05-14 18:59:23