当前位置: 首页 > 知识库问答 >
问题:

如何在Azure服务总线中使用PEEK方法知道队列是否已被完全读取

糜征
2023-03-14

我正在使用Azure服务总线REST API接收消息。要求具有从Azure服务总线队列读取消息并转发消息以进行处理的计划作业。如果处理成功,请从队列中删除它们,或将它们保留在队列中,以便在下一个计划作业中处理。我使用Peek-Lock消息(非破坏性读取)方法(https://docs.microsoft.com/en-us/rest/api/servicebus/peek-lock-message-non-destructive-read)。

我面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再次重新读取相同的队列。

共有1个答案

刁英朗
2023-03-14

你的要求有点问题。

如果处理成功,则将其从队列中删除或保留在队列中,以便在下一个计划作业中处理。

成功处理应始终导致消息完成。否则,你就是自找麻烦。在peek lock模式下处理消息时,消息将被锁定最多5分钟。如果处理成功,您有责任完成它。如果未完成,则表明处理未成功,应根据您的要求再次读取。不要将已成功处理的邮件留在队列中。

我面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再次重新读取相同的队列。

你不应该担心这个。阅读消息并进行处理。如果处理失败,消息将重新出现。否则,应删除一条消息。如果要处理幂等性,即,如果由于某种原因,消息未被多次处理,请确保在成功处理之后和完成之前,将消息ID(假定它是唯一的)存储在数据存储中,并根据该数据存储验证任何新消息。

 类似资料:
  • 我有一个应用程序,在这个应用程序中,我可以在进程的一部分中以JSON格式将消息写入Azure服务总线队列。我有一个下游进程,我想将该消息从队列中弹出,将json转换为一个对象,然后处理该对象。 我没有问题将消息推送到队列上,但我还没有找到任何将消息从队列中逐一或循环弹出的示例。我在微软或Github上看到的每一个例子都是一个控制台应用程序(在网络应用程序中毫无用处),它设置了某种侦听器,可以抓取队

  • 我正在使用azure服务总线主题和订阅机制,并希望处理所有在死信队列中的消息。 此外,我想通过C#中的Azure Web作业处理消息,并将其发送回队列。所以我想知道如何通过我的应用程序处理死信队列上的消息?

  • 我有一个服务总线Q,从Azure门户可以或多或少地看到服务总线Q包含多少条目。如何使用他们的管理API获取此计数?我仔细阅读了文档,但没有找到答案。

  • 我在同一命名空间中有2个Azure Service Bus队列。我使用ScheduledQueueTimeUTC将计划消息放置在其中一个队列(“计划队列”)中,并将要立即处理的消息放置在另一个队列(“现在队列”)中。 我想做的是设置“预定队列”的自动转发属性,以便在消息到达它们的“预定队列”时将消息转发到“现在队列”。队列转发会这样工作吗?还是队列自动转发会立即发送已排队和未排队的消息? 我在任何

  • 我想从azure服务总线(队列)读取所有消息。 我已经按照下面的指示链接https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-php-how-to-use-queues 目前它只能获取一条消息。。 我想从服务总线(队列)获取所有消息。 提前谢谢。。

  • 今天晚上,我们观察到排队时间非常慢。我们的追踪数据告诉我们 需要45-60秒。这种情况发生在两个已经存在很长时间的队列上。他们几乎从来没有超过1-2条记录,我们使用一个带有服务总线触发器的网络作业来完成任务。我们正在排队等候一个简单的POCO。还有另一个队列正在快速排队,所以由于没有任何其他想法,我删除了两个麻烦的队列。当代码重新创建它们时(正如它被构建时所做的那样),它们在不到一秒钟的时间里开始