我们使用 Azure 服务总线队列,并使用 AcceptMessageSession 接收消息(代码如下)。
接受 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;
}
更新:
我怀疑虽然某个会话的所有消息都已过期,但会话本身仍然存在,因此它被接受但没有收到任何消息。