Azure Service Bus是否可能创建了该消息的副本? [英] Is it possible that Azure Service Bus created a duplicate of the message?
本文介绍了Azure Service Bus是否可能创建了该消息的副本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们在Azure Service Bus中遇到了一些奇怪的行为,除了Azure中的某个错误之外,我们不知道如何解释。事情是这样的:
- 我们已向Azure Service Bus发送过一次消息
- 执行发送消息的调用花了一分钟多一点的时间,但还是成功了,之后消息接收正常
- 大约半秒后出现重复消息,
EnqueuedTimeUtc
和SequenceNumber
与第一条消息不同,但它具有与我们生成的相同的内容和MessageId
现在我们非常确定我们只对SendMessage
进行了一次调用,因为我们确实在此之前进行了记录,并且还记录了所有接收到的消息。
- 发送第一封邮件
- 该操作需要大约63秒才能完成
- 之后会发送一些其他消息
- 在发送第一条消息大约30秒后出现重复项(至少根据入队时间)。
所以问题是:有没有人经历过类似的事情,这会不会是Azure本身的错误/临时问题,他们能保证这种情况不会发生吗?由于呼叫进行了一分钟,我怀疑当时Azure中发生了什么事情,可能导致了它(例如更新或类似的事情)
推荐答案
这种情况可能会发生,这是一种"正常"现象。Service Bus SDK具有内部自动重试策略,以克服瞬时错误。因此,如果第一次尝试成功,但由于网络问题导致响应丢失,它将再次尝试并有效地传递两次消息。
客户端或网络级别的错误可能会提前发生,发送的消息可能会被提交到队列中,但确认不会成功返回给客户端。此方案使客户端无法确定发送操作的结果。
要解决此问题,可以按一定间隔启用Duplicate Detection。这将防止在此间隔内发送重复的邮件ID。
有缺陷:
请注意,启用重复检测和窗口大小将直接影响队列(和主题)吞吐量,因为所有记录的消息ID都必须与新提交的消息标识符相匹配。
理想情况下,您应该有一个幂等接收器,这意味着它已为复制做好准备。但这并不总是可能/方便的。
这篇关于Azure Service Bus是否可能创建了该消息的副本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文