我有一个Azure存储队列,用于在不同的微服务之间传输消息。从Nuget安装了WindowsAzure.Storage
包(版本9.2.0)。
这是将新消息排队到队列的方式:
CloudQueueMessage message = new CloudQueueMessage(JsonConvert.SerializeObject(my_obj));
Queue.AddMessage(message);
在99.9%的通话中,它运行良好。我不时会看到函数Queue.AddMessage()
长期陷入困境。
上面的代码包含在一个计算执行时间的对象中。包装器由主线程运行,并在不同的线程中运行上面的代码。如果执行时间过长,主线程将中止正在运行的线程。在我的情况下,它运行180秒,然后包装器只是杀死线程。这导致注入ThreadAbortException
:
System.Threading.ThreadAbortException: Thread was being aborted.
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 751
at Microsoft.WindowsAzure.Storage.Queue.CloudQueue.AddMessage(CloudQueueMessage message, Nullable`1 timeToLive, Nullable`1 initialVisibilityDelay, QueueRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Queue\CloudQueue.cs:line 1284
此代码运行180秒(或更多)没有任何意义。它应该快得多。
我怀疑这个问题是因为在WindowsAzure.Storage
nuget包的后端运行的HTTP超时机制。
AddMessage()
命令中使用的默认HTTP请求超时是多少?怎么检查?