- Microsoft.Azure.Storage.Blob 11.2.0
- Microsoft.Azure.Storage.Queue 11.2.0
- Microsoft.Azure.Cosmos.Table 1.0.7
Через несколько дней я заметил другое поведение в системе Linux.
Несколько вызовов, взаимодействующих со службой Azure (BLOB, таблица, очередь), получают тайм-ауты (подсистема, похоже, дает сбой, я пробовал другую политику повтора с результат тот же).
На 10 000 звонков получаю от 10 до 50 ошибок (или очень длинные звонки по 180 секунд, до того как я поменял таймауты). Это происходит во всех службах Azure: таблице, больших двоичных объектах и очереди.
Я пробовал разные решения, чтобы выяснить, почему:
- Я создаю экземпляр клиента (blobClient, TableClient..etc) при каждом вызове или перезапускаю один и тот же клиент, но без разницы
- Я меняю все таймауты, чтобы справиться с таким поведением. Я работаю над ServerTimeout и MaximumExecutionTime и помещаю слой сверху с моим механизмом повтора, чтобы минимизировать ошибки. Теперь у меня есть «всего» несколько вызовов по 20 секунд (вместо 2/3 секунды, например).
- Я попробовал все решения с похожими проблемами, найденные в Stackoverflow
... но ничего не работает (на данный момент)
Итак, я пришел к выводу, что в HTTP-клиенте есть что-то, используемое внутри Azure SDK, это зависит от операционной системы, в которой вы запускаете свой код.
После нескольких статей я думаю, что это может быть заголовок Keep-Alive, поэтому я пробую корень своей композиции:
Код: Выделить всё
ServicePointManager.SetTcpKeepAlive (true, 120000, 10000);
Есть идеи или предложения?
Подробнее здесь: https://stackoverflow.com/questions/635 ... core-3-app
Мобильная версия