Azure 服务总线:通过具有内置重试策略的消息泵接收到的瞬时错误(异常)。为啥?

Posted

技术标签:

【中文标题】Azure 服务总线:通过具有内置重试策略的消息泵接收到的瞬时错误(异常)。为啥?【英文标题】:Azure Service Bus: transient errors (exceptions) received through the message pump with built-in retry policy. Why?Azure 服务总线:通过具有内置重试策略的消息泵接收到的瞬时错误(异常)。为什么? 【发布时间】:2015-01-08 15:14:55 【问题描述】:

我一直在阅读 2013 年 4 月推出的 Event-Driven Message Programming Model、OnMessageOptions.ExceptionReceived Event、内置的 RetryPolicy(2013 年 5 月,RetryPolicy.Default)、The Transient Fault Handling Application Block(2011 年)已过时,以及更多(见底部)。

我一直在监视通过消息泵接收到的异常是否存在临时错误,并且每天都会收到 MessagingCommunicationExceptions。此article(更新:2014 年 9 月 16 日),推荐以下:

此异常表示可能出现的通信错误 当从消息传递客户端连接到服务总线时 基础设施无法成功建立。在大多数情况下, 如果存在网络连接,则可以将此错误视为 短暂的。客户端可以尝试重试已执行的操作 导致了这种类型的异常。还建议您 验证域名解析服务 (DNS) 是否正常运行 因为这个错误可能表明目标主机名不能 解决了。​​

我的理解是,在版本 2.1 (2013) 之后,无需编写额外的代码来处理服务总线上的瞬态错误。除非我的前提是错误的,否则为什么我每天都会收到瞬变错误?是否应该忽略通过消息泵收到的异常?如果被忽略,我只能假设意外的异常也会被忽略。我当然不希望这种情况发生。

Microsoft.ServiceBus 的版本是 2.4.0.0

还有兴趣:upgrading Windows Azure Service Bus from 1.x to 2.0 - Retry Policy、Introducing the Event-Driven Message Programming Model for the Windows Azure Service Bus、What's New in the Azure SDK 2.0 Release (April 2013)、What's New in the Service Bus 2.1 Release (May 2013)、Transient Fault Handling。

【问题讨论】:

【参考方案1】:

官方回复here。简而言之,在重试尝试后会冒泡异常。长篇:

你从 ExceptionHandler 回调中得到的瞬态异常意味着 重试尝试后,这些异常会冒泡。你应该只是 记录它以用于监控目的。如果需要,请采取行动。为了 例如,如果您的客户端失去网络连接,您应该期望 大量的通信异常流经处理程序。 在这种情况下,您可能需要采取适当的措施来解决问题。所以 问题“我应该忽略它们吗?”的答案真的取决于 状况。 - Serkant Karaca,微软

【讨论】:

以上是关于Azure 服务总线:通过具有内置重试策略的消息泵接收到的瞬时错误(异常)。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 服务总线 http 与 websocket

如何使用标准 Azure 逻辑应用的无状态工作流可靠地处理 Azure 服务总线消息

在 Azure 数据工厂中完成活动后,如何向 Azure 服务总线发送消息

使用内置触发器或事件网格的 Azure 函数

Azure 服务总线 PeekLock 在五秒后超时

Azure 服务总线向队列中添加消息的速度过快