gpt4 book ai didi

c# - Azure 服务总线队列 PeekBatch 锁定?

转载 作者:行者123 更新时间:2023-12-01 20:22:29 25 4
gpt4 key购买 nike

我正在使用 PeekBatch(<messageCount>) QueueClient上的方法(Windows Azure 服务总线包版本 2.1.2.0)。

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

五分钟是 BrokeredMessage 的最长锁定时间,所以我想知道是否 PeekBatch实际上,就像在接收上一样锁定这些消息,尽管据我所知,窥视不应该锁定。

我正在尝试构建一个 MVC View ,以便能够查看队列中实际存在的内容,但这个 View 妨碍了我。任何人都可以提供任何指导吗?

更新:这似乎仅在我缓存我的 QueueClient 时才会发生。使用静态属性。如果我创建 QueueClient每次都是新鲜的,PeekBatch按预期工作。我仍然不知道为什么要重用 QueueClient导致这种情况。 Microsoft seems to recommend reusing the QueueClient though ,而不是每次都重新创建它,所以我在这里仍然不知所措。

最佳答案

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

因此,如果您处于循环中并反复调用 peek 直到它没有返回消息,那么您实际上已经浏览了队列中的所有消息。

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

如果您确实只需要查看第一条消息,则仅调用 peek 一次。它只会返回第一条消息。如果您需要每次持续拉取第一条消息,请执行 Peek(0)。如果您希望每次先显示 10 条消息,请调用 PeekBatch(0, 10);这就像说给我序列号大于 0 的前十条消息。

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

关于c# - Azure 服务总线队列 PeekBatch 锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com