所以场景是我使用SB队列来限制对其他服务的传出回调.回拨给其他服务的标准问题之一是它们可能会因无法控制的时间而停机.假设我检测到目标已关闭/没有响应,放弃该消息的最佳模式是什么,以便它不会立即重新出现在队列中?
以下是我要么意识到的,尝试过或正在考虑的一些方法:
显然,如果我只是使用BrokeredMessage::Abandon()该消息将被解锁并重新放回队列.对于这种情况以及我想要避免的情况,这显然是不可取的.
如果我只是忽略了我遇到错误并且从不调用Abandon的事实,这将使它不会立即出现,但我真的没有细致的控制,直到它再次显示多久,我想实现一个腐朽的重试策略.
我想也许我可以调用BrokeredMessage::Abandon(IDictionary<string, object>)并以某种方式更新ScheduledEnqueueTimeUTC属性,但我已经尝试了这个并且除了最初发送消息之外似乎没有办法影响该属性.有道理,但值得一试.
我考虑过只是BrokeredMessage::Complete()在这种情况下使用,实际上只是用属性集将消息的新副本排入队列ScheduledEqueueTimeUTC.
最后的子弹几乎看起来太过沉重,但我得出结论,考虑到队列的固有性质,它可能是正确的答案.我只想到在Azure SB队列中可能有一个更好的方法来实现这一点,我很想念.