Наилучшая практика надежного использования удаленных веб-служб в ColdFusion? - PullRequest
2 голосов
/ 28 июня 2011

Как надежно выполнять вызовы веб-служб в ColdFusion?

Как вы справляетесь с ситуациями, когда удаленный сервер не работает / занят? и привести к таймауту страницы?

Как выполнить повтор каждые x секунд?

Должны ли удаленные вызовы вызываться асинхронно, и если да, то как выполнять обратные вызовы?

Может быть, поддержка ColdFusion 10 <cfjob> и Closure решит эту проблему более понятным и понятным способом. Однако как решить эти проблемы в CF9?

Спасибо

1 Ответ

2 голосов
/ 28 июня 2011

Мы активно интегрируемся с третьими сторонами, как правило, через REST, SOAP или ActiveMQ.

Как правило, мы обрабатываем все вызовы веб-служб одинаково - в случае их сбоя (из-за тайм-аута или другой ошибки) мы генерируем исключение, устанавливая атрибут cfhttp throwOnError=true.Это обнаруживается высокоуровневой обработкой исключений приложений, которую электронная почта или команда разработчиков могут расследовать.

Единственное исключение из этого подхода - при вызове «тривиального» веб-сервиса со страницы CFM, которая не является критичной - например, для получения некоторых данных презентации.Мы не хотим, чтобы тайм-аут при этом вызове скрывал всю страницу, поэтому мы устанавливаем throwOnError=false (по умолчанию) и проверяем сообщение / код состояния на наличие ошибки.Мы отправляем сообщение об ошибке команде разработчиков для расследования, но мы просто продолжаем обработку страницы.

Мы стараемся избегать повторных попыток, так как мы знаем, что большинство служб вскоре будут вызваны по другому запросу, и где вы проводите черту?1 повтор?100 попыток?Как это влияет на пользователя?Я также считаю, что логика повторных попыток в лучшем случае может быть грязной, обычно уродливой и повторяющейся.

Другой подход к веб-службам, результаты которых используются на страницах презентации, заключается в вызове их из запланированного задания или cfthread.Это хороший подход, если вы можете сохранить результат в кэше, базе данных или иным образом и заставить свой код обращаться к постоянному хранилищу данных, а не к самой веб-службе.Это имеет двойной эффект, заключающийся в том, что страница работает быстро (если ваш веб-сервис задерживается) и что любые ошибки не влияют на пользователя.Снова о любой неудаче можно сообщить для расследования.

Мы видели, как веб-сервис на загруженной странице презентации отключал сервер из-за слишком большого времени ожидания (я бы хотел нацелиться примерно на 1-3 секунды максимум).Все запущенные запросы были израсходованы на работу с веб-сервисом, а затем начались очереди.Не красивоУчитесь на этой ошибке и используйте очень быстрый таймаут, иначе просто не размещайте там веб-сервис, как я упоминал ранее.

Я не верю, что возможно выполнять асинхронные вызовы / обратные вызовы.Возможно, вы думаете о Node.js :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...