【发布时间】:2020-09-23 07:38:41
【问题描述】:
简短的问题:如果处理消息所花费的时间超过给定的限制,我们希望抛出异常。
更长的问题:我们有几个本地应用程序作为 Windows 服务运行,侦听 Azure 服务总线订阅上的消息,以及写入 Azure Blob 存储的其他内容。
我们对服务总线或一般消息传递没有任何问题。服务总线 SDK 似乎运行良好。
问题在于我们的应用程序逻辑,在收到消息后,我们对外部服务(如 SQL 服务器)进行了大量调用。 Oracle DB、blob 存储、Web API。我们发现对 blob 存储的调用突然开始挂起,即什么也没发生,并且这发生在同一台机器上的多个应用程序中。 症状是消息没有被处理。由于问题是调用 blob 存储由于某种原因没有响应,解决方案是在 blob 客户端上设置 MaximumExecutionTime。有了这个,我们会在指定的超时后得到一个 TaskCanceledException,而不是永远等待(直到应用程序重新启动)
我想知道的是是否可以在 SubsciptionClient 中设置最大执行时间。不是为了获取消息,而是为了我们对消息的处理。或者我们是否必须自己在回调(消息处理程序)中实现它。
【问题讨论】:
-
好吧,我认为解决 Blob 连接问题的根本原因是最好的办法。其他东西只是一种解决方法
-
是的,你是对的,我们已经修复了它。我们担心的是,我们已经运行了多年没有 MaximumExecutionTime 没有任何问题,突然之间就出现了问题。如果应用程序的其他地方发生类似情况,我们希望有一个保障措施。
-
我之前遇到过这个问题,我们已经像你一样在
messageHandler(客户订阅)中实施了解决方案。
标签: azure azureservicebus