Дождитесь загрузки данных в RESTful Webservice - PullRequest
0 голосов
/ 18 апреля 2011

Я отправляю один запрос на выборку данных на стороне сервера веб-сервисов RESTful, Теперь в моем веб-сервисе я написал код для извлечения исторических данных из внешнего сервиса, когда все исторические данные извлекаются из внешних служб, вызывается функция уведомления, которая указывает, что загрузка данных завершена.

Проблема в том, что когда я отправляю запрос на мои веб-сервисы, мои веб-сервисы вызывают функцию для извлечения данных из внешних сервисов и не ждут уведомления и возвращаются обратно. Чтобы заставить его ждать, мне нужно поставить задержку.

Так что это правильный способ сделать это или есть другие альтернативы, потому что я не могу предсказать, сколько времени веб-сервисам потребуется для загрузки данных.

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Вы должны создать «Ресурс транзакции», который идентифицирует длительную операцию. Вот хорошее объяснение:

Одна из распространенных критических замечаний в отношении REST потому что он так привязан к HTTP (который не поддерживает клиента механизм обратного вызова), делая асинхронный сервис или уведомление на отдыхе сложно. Так как же мы осуществлять долгосрочные транзакции (которые обычно требуют поддержка асинхронности и обратного вызова) в REST?

Основная идея состоит в том, чтобы немедленно создать «Ресурс транзакции» для вернуться к клиенту. В то время как фактическая обработка происходит асинхронно в фоновом режиме, клиент в любое время может опросить «Ресурс транзакций» за последние статус обработки. Давайте посмотрим на пример запроса на печать книга, которая может занять много времени, чтобы полная

(пример ...)

Обратите внимание, что ответ создан немедленно, который содержит URI ресурс транзакции, даже до того задание на печать запущено. Клиент может опросить ресурс транзакции получить последний статус печати работа.

(получено из " Common REST Design Pattern ").

0 голосов
/ 18 апреля 2011

Я бы предложил использовать механизм кэширования.Это исторические данные, поэтому я думаю, что это не сильно изменится, обновите кеш другим способом.

Ваш WebService может читать из кеша.

0 голосов
/ 18 апреля 2011

Используйте java.util.concurrent.CountDownLatch.

  1. Создайте его и установите счетчик в один (1) перед вызовом внешней службы
  2. Подожди на защелке
  3. Иметь функцию уведомления callDown () на защелке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...