Azure WebJob读取Service Bus消息异常成因咨询(Closing messaging factories)
问题成因咨询
我们使用NServiceBus 6.4.3和**.NET Framework 4.6.1**开发了Azure WebJob,用于读取Azure Service Bus队列消息。该WebJob4年前曾突发停止读取消息,2023年1月11日再次复现。日志中出现NServiceBus.ForwardingTopology Closing messaging factories信息及未处理的System.Threading.Tasks.TaskCanceledException异常,目前仅能通过重启WebJob解决,现咨询该错误的成因。
相关日志
[11/07/2022 22:27:08 > 3eb1d6: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [11/07/2022 22:27:08 > 3eb1d6: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) [11/07/2022 22:27:08 > 3eb1d6: ERR ] at Microsoft.Azure.WebJobs.JobHost.Call(MethodInfo method) [11/07/2022 22:27:08 > 3eb1d6: ERR ] at Rock.Invoice.InvGateway.WebJobHost.Program.Main() [11/07/2022 22:27:08 > 3eb1d6: SYS ERR ] Job failed due to exit code -532462766 [11/07/2022 22:27:08 > 3eb1d6: SYS INFO] Status changed to Stopped [11/07/2022 23:00:47 > 7b5dbd: SYS INFO] WebJob is still running [11/07/2022 23:51:47 > b9948f: INFO] 2022-11-07 23:51:47.223 INFO NServiceBus.ForwardingTopology Closing messaging factories [11/07/2022 23:51:47 > 7b5dbd: INFO] 2022-11-07 23:51:47.668 INFO NServiceBus.ForwardingTopology Closing messaging factories [11/08/2022 07:13:26 > b9948f: SYS INFO] WebJob is stopping due to website shutting down [11/08/2022 07:13:26 > b9948f: SYS INFO] Status changed to Stopping [11/08/2022 07:13:26 > b9948f: ERR ] [11/08/2022 07:13:26 > b9948f: ERR ] Unhandled Exception: System.Threading.Tasks.TaskCanceledException: A task was canceled. [11/08/2022 07:13:26 > b9948f: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) [11/08/2022 07:13:26 > b9948f: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) [11/08/2022 07:13:26 > b9948f: ERR ] at Microsoft.Azure.WebJobs.Host.Protocols.PersistentQueueWriter`1.<EnqueueAsync>d__3.MoveNext() [11/08/2022 07:13:26 > b9948f: ERR ] --- End of stack trace from previous location where exception was thrown ---
错误成因分析
- Azure平台强制回收导致进程终止:日志中明确显示
WebJob is stopping due to website shutting down,说明Azure因资源调整、维护或实例回收等原因,强制终止了WebJob进程。此时NServiceBus正在执行资源清理(关闭消息工厂),而WebJobs Host的内部队列写入操作被中断,触发TaskCanceledException。 - NServiceBus旧版本的优雅退出缺陷:NServiceBus 6.4.3是较早期版本,在处理平台强制停止信号时,可能缺乏完善的优雅退出逻辑,无法正确捕获并处理任务取消场景,导致未处理异常抛出,最终WebJob异常退出。
- WebJobs Host内部操作被取消:
PersistentQueueWriter.EnqueueAsync抛出取消异常,说明WebJobs Host在尝试向内部持久化队列写入数据时,因进程被终止而导致任务被取消,这种情况通常发生在平台触发停止后,WebJob没有足够时间完成资源清理流程。 - 旧组件兼容性问题:NServiceBus 6.4.3和.NET Framework 4.6.1均为发布已久的版本,可能与Azure Service Bus服务端的协议更新、WebJobs Runtime的新版本存在兼容性冲突,在网络波动、平台回收等边缘场景下,无法自动恢复连接或处理异常,导致WebJob停止消费消息。
内容的提问来源于stack exchange,提问作者David Klempfner
相关产品推荐
相关产品推荐

