azure - 如何知道队列是否已在 Azure 服务总线中使用 PEEK 方法完全读取
问题描述
我正在使用 Azure 服务总线 REST API 来接收消息。要求是有一个计划的作业来读取来自 Azure 服务总线队列的消息并将它们转发以进行处理。如果处理成功,则将它们从队列中删除或保留在队列中以在下一个计划作业中处理。我正在使用 Peek-Lock 消息(非破坏性读取)方法(https://docs.microsoft.com/en-us/rest/api/servicebus/peek-lock-message-non-破坏性读取)。
我面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再次重新读取同一个队列。
解决方案
你的要求有点问题。
如果处理成功,则将它们从队列中删除或保留在队列中以在下一个计划作业中处理。
成功的处理应该总是导致消息完成。否则,你就是在自找麻烦。在 peek-lock 模式下处理消息时,消息最多被锁定 5 分钟。如果处理成功,您有责任完成它。如果未完成,则表明处理不成功,应根据您的要求再次阅读。不要将成功处理的消息留在队列中。
我面临的问题是在我的循环中,如何知道我已经完全读取了队列,这样我就不会再次重新读取同一个队列。
你不应该担心这个。阅读消息并处理。如果处理失败,该消息将重新出现。否则,应删除一条消息。如果您想处理幂等性,即确保如果由于某种原因消息未多次处理,则在成功处理后并在完成之前将消息 ID(假设它是唯一的)存储在数据存储中并针对该消息验证任何新消息数据存储。
推荐阅读
- azure - 使用 Azure Web 作业配置 Application Insights
- node.js - 使用添加到网站的 ReactJ 导入包
- postsharp - PostSharp:方法 *** 应使用选择器自定义属性进行注释,因为它是主处理程序
- tomcat - 配置 Tomcat 以使用启用了 kerberos 的代理
- java - Java WatchService 最多 512 个注册目录
- sql-server - 支持同一数据库中的测试版和生产版
- mysql - 在限制范围内选择 NULL 值
- python - 在没有参考检查的情况下测试计算
- java - 自动装配的依赖项为空
- reactjs - 如何在 react-select 下拉菜单中更改 zIndex