Как бороться с timeout у WSDL с SOAP?

Доброе утро!
Помогите побороть такую вещь. Есть сервис WSDL, соединение по SOAP. Сервис тормознутый. Иногда он висит намертво, а иногда долго отвечает. Нужно передать ему данные, а потом получить ответ. Поставил default_socket_timeout в 20 секунд. В итоге получается данные иногда уходят на сервис, он их у себя записывает, а я не успеваю получить ответ и в итоге ничего не могу записать в базу. Если убрать таймаут то в моменты когда сервис висит намертво у меня сервер выдаёт таймаут и падает с 500 ошибкой. Получается что таймаут ставить надо. Но как понять принял ли мои данные сервис?
  • Вопрос задан
  • 5098 просмотров
Решения вопроса 1
@apasen
Узнать можно если только сам сервис будет сообщать об этом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vmm86
@vmm86
Software Developer
Недавно сталкивался с похожей проблемой. Бэкенд сайта на Python, но решение может помочь и для других языков.
Провисающие запросы к SOAP API занимали в среднем по 8-10 секунд и тормозили работу сайта в целом. Оптимизация настроек nginx и сервера приложений Python не решала проблему.
Помогла возможность библиотеки для работы с SOAP API (zeep) кешировать WSDL-ответ, получаемый при создании нового подключения, хранить его какое-то время, переиспользуя для создания новых подключений.
После этого запросы стали выполняться очень быстро (в среднем не более секунды), а нагрузка на процессор сервера, на котором работал SOAP-сервис, упала как минимум вдвое. -)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы