我正在开发一个使用 azure 服务总线队列的命令处理应用程序。命令从网站发出并发布到队列,队列消息由工作角色处理。处理包括根据队列消息值从数据库和其他来源获取数据并将其发送到不同的主题。流量是 ,
- 接收消息
- 处理消息
- 将消息标记为完成/放弃消息处理异常。
我在这里面临的挑战是处理时间。有时它超过了最大消息锁定时间段(5 分钟 - 配置),因此消息被解锁并重新出现以供工作人员角色拾取(考虑工作人员角色的多个实例)。所以这会导致再次处理相同的消息。
我必须有哪些选择来处理这种情况。?
我想过,
接收消息 - 添加到局部变量 - 标记消息完成。如果出现异常,请再次将消息发送到队列或单独的队列(假设消息队列失败)。第二个队列也意味着另一个工作角色来处理它。
在处理过程中有一个运行的 foreach 循环。所以我想用 Parallel.Foreach 代替。但不确定它会获得多少时间,并且还阅读了一些关于在 azure 中使用 Parallel 时遇到的问题的帖子。
欢迎提出建议,修正。