Azure服务总线队列PeekBatch锁定?

Mic*_*ael 10 c# azure

我使用PeekBatch(<messageCount>)的方法QueueClient(Windows Azure的服务总线软件包版本2.1.2.0).

它第一次工作正常,并返回我的队列中存在的单个消息,但后续调用什么都不返回.五分钟后,呼叫将再次返回消息.

五分钟是a的最大锁定时间BrokeredMessage,所以我想知道是否PeekBatch实际上是锁定那些消息,就像它在接收上一样,即使偷看不应该锁定,据我所知.

我正在尝试构建一个MVC视图,以便能够看到我的队列中实际存在的内容,但是这个视图正在阻碍.任何人都可以就此提供任何指导吗?

更新:当我QueueClient使用静态属性缓存时,似乎只会发生这种情况.如果我QueueClient每次创造新鲜,PeekBatch工作按预期.我仍然不知道为什么重复使用这个QueueClient原因. 微软似乎建议重用QueueClient,而不是每次都重新创建它,所以我仍然在这里不知所措.

Mik*_*eWo 17

QueueClient有点帮助.在Peek方法(Peek和PeekBatch)中,您可以简单地调用它们,或者您可以给出特定的序列号以在特定序列号之后检索特定消息.如果您只是调用Peek,或者在您的情况下PeekBatch,没有序列号,那么它将检索队列中的第一条消息或消息.返回消息后,QueueClient会跟踪它提取的最后一个序列号.对Peek的每次后续调用都将获取队列中的下一条消息.这个想法是你"浏览"消息,而不是每次只对队列中的第一条消息感兴趣.

所以,如果你在循环中并反复调用peek,直到它没有返回消息,你基本上已经浏览了队列中的所有消息.

由于您在没有序列号的情况下调用PeekBatch,QueueClient会记住它获得的最后一个集,然后下一个调用实际上会尝试在它浏览的最后一条消息之后获取下一个集.这就是为什么当您重新创建QueueClient时,它似乎重置.它似乎在5分钟后自行重置的原因看起来很奇怪,但它可能只是在与队列上的Timeout操作相关的某个点之后清除浏览值.到那时,如果它是一个忙碌的队列,那么序列号无论如何都会相当远.

如果您只需要查看第一条消息,请只调用一次peek.它只会返回第一条消息.如果您需要每次执行Peek(0)时不断拉出第一条消息.如果你想每次首先说10条消息,那么调用PeekBatch(0,10); 这就像说给出序号大于0的前十条消息.

重用QueueClient的指导是合理的.它正在进行各种信息和事物的缓存.您不希望每次都重新创建它.