Azure服务总线:消息处理的最大执行时间

Azure服务总线:消息处理的最大执行时间,azure,azureservicebus,Azure,Azureservicebus,问题的简短形式:如果处理消息的时间超过给定限制,我们希望抛出异常 更长形式的问题:我们有几个内部部署的应用程序作为Windows服务运行,在Azure服务总线订阅上侦听消息,以及其他写入Azure Blob存储的内容 一般来说,我们在服务总线或消息传递方面没有问题。服务总线SDK似乎工作得很好 问题在于我们的应用程序逻辑,在收到消息后,我们对外部服务(如SQL server)进行了大量调用。Oracle数据库、blob存储、web API。我们发现对blob存储的调用突然开始挂起,即没有发生任何

问题的简短形式:如果处理消息的时间超过给定限制,我们希望抛出异常

更长形式的问题:我们有几个内部部署的应用程序作为Windows服务运行,在Azure服务总线订阅上侦听消息,以及其他写入Azure Blob存储的内容

一般来说,我们在服务总线或消息传递方面没有问题。服务总线SDK似乎工作得很好

问题在于我们的应用程序逻辑,在收到消息后,我们对外部服务(如SQL server)进行了大量调用。Oracle数据库、blob存储、web API。我们发现对blob存储的调用突然开始挂起,即没有发生任何事情,而这在同一台机器上的多个应用程序中同时发生。症状是没有处理消息。由于问题是对blob存储的调用由于某种原因没有响应,因此解决方案是在blob客户端上设置MaximumExecutionTime。有了它,我们在指定的超时之后得到一个TaskCanceledException,而不是永远等待(直到应用程序重新启动)

我想知道的是,是否可以在SubSectionClient中设置最大执行时间。不是为了获取消息,而是为了我们对消息的处理。或者我们是否必须自己在回调(消息处理程序)中实现它。

您可以尝试设置属性,该属性指定消息操作在超时之前必须完成的时间

您可以使用如下代码更改超时:

MessagingFactorySettings settings = new MessagingFactorySettings { 
            OperationTimeout = new TimeSpan(0, 2, 0), 
            TokenProvider = TokenProvider.CreateSharedSecretTokenProvider("issuer", "sharedkey") };

var address = ServiceBusEnvironment.CreateServiceUri("sb", "serviceNamespace", string.Empty);
var messagingFactory = MessagingFactory.Create(address, settings);

return messagingFactory.CreateSubscriptionClient("subName");
您可以尝试设置属性,该属性指定消息传递操作在超时之前必须完成的时间

您可以使用如下代码更改超时:

MessagingFactorySettings settings = new MessagingFactorySettings { 
            OperationTimeout = new TimeSpan(0, 2, 0), 
            TokenProvider = TokenProvider.CreateSharedSecretTokenProvider("issuer", "sharedkey") };

var address = ServiceBusEnvironment.CreateServiceUri("sb", "serviceNamespace", string.Empty);
var messagingFactory = MessagingFactory.Create(address, settings);

return messagingFactory.CreateSubscriptionClient("subName");

我认为解决blob连接根本原因问题的最好办法。其他东西只是一个解决办法是的,你是对的,我们已经解决了。我们担心的是,我们已经运行多年,没有最大执行时间,没有任何问题,突然间,这成了一个问题。如果在应用程序的其他地方发生类似的情况,我们希望有一个保护措施。我以前遇到过这个问题,我们已经在
messageHandler
(客户端订阅)中实现了解决方案,就像您一样。我认为最好用blob连接修复根本原因问题。其他东西只是一个解决办法是的,你是对的,我们已经解决了。我们担心的是,我们已经运行多年,没有最大执行时间,没有任何问题,突然间,这成了一个问题。如果应用程序中的其他地方发生类似情况,我们希望有一个保护措施。我以前遇到过这个问题,我们已经在
messageHandler
(客户端订阅)中实现了解决方案。我认为此设置可能只是用于向客户端获取消息的操作,不适用于应用程序中消息的自定义处理。我们正在使用此设置的默认值,并且我们的应用程序肯定在单个消息上花费了大量时间。我认为此设置可能只是用于将消息获取到客户端的操作,而不是用于应用程序中消息的自定义处理。我们正在使用此设置的默认值,我们的应用程序肯定在单个消息上花费了更多的时间。