Выполнение асинхронных вызовов исходящего HTTP-шлюза

У меня есть система, которую я собираюсь переоборудовать в бэкэнд с интеграцией Spring.

Некоторые из шаблонов в этой системе относятся к одному и тому же веб-сервису и / или HTTP-серверу (у меня есть оба) с несколькими запросами и немного разными параметрами. Затем результаты объединяются и представляются пользователю.

У меня он успешно работает в синхронном режиме, когда запрос поступает через шлюз, «разбивается» на сообщения, содержащие значение ключа для каждого вызова (вызов с A, вызов с B, вызов с XYZ). Затем каждое сообщение отправляется на шлюз исходящей почты HTTP, выполняется вызов и возвращается. Затем результаты объединяются и отправляются обратно через шлюз.

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

Я думаю, что мне нужно создать второй шлюз, который обертывает исходящий шлюз HTTP, и использовать возвращаемое значение для создания асинхронного вызова. Однако я не уверен, как это будет работать с агрегацией, и в этом есть ощущение, что должен быть более чистый способ. У меня не было возможности использовать Spring Integration 3 года, поэтому я пытаюсь все заново изучить.

Я что-то упускаю или это как нужно делать?


person Mike Cornell    schedule 21.12.2012    source источник


Ответы (1)


Вы можете просто создать каналы (на которые подписаны исходящие шлюзы) ExecutorChannels (http://static.springsource.org/spring-integration/reference/html/messaging-channels-section.html#executor-channel и http://static.springsource.org/spring-integration/reference/html/messaging-channels-section.html#channel-configuration-executorchannel).

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

person Gary Russell    schedule 21.12.2012
comment
Спасибо. Я знал, что упустил что-то очевидное. Мне просто нужно понять, как теперь будет работать аварийное переключение. - person Mike Cornell; 21.12.2012