Фон
У меня есть очередь хранилища Azure для передачи сообщений между различными микро-службами.Установил пакет WindowsAzure.Storage
(версия 9.2.0) из Nuget.
Вот как выполняется добавление нового сообщения в очередь:
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 секунд (или более).).Это должно быть намного быстрее.
Вопросы:
Я подозреваю, что эта проблема из-за механизма тайм-аута HTTP, работающего в серверной части пакета WindowsAzure.Storage
nuget.
- Какое время ожидания HTTP-запроса по умолчанию используется в команде
AddMessage()
?Как проверить? - Как изменить время ожидания HTTP-запроса по умолчанию на другое?