Реализация исходящего шлюза с интегрированной пружиной

Как указать реализацию сервиса для исходящего шлюза в Spring Integration? Если исходящие шлюзы предназначены для двунаправленной связи и обычно используются для обеспечения интеграции с внешними системами, а активаторы услуг - для локальных вызовов служб, то как реализовать исходящий шлюз для пользовательской транспортной / внешней системы? Пространство имен шлюза позволяет настроить интерфейс службы для входящего шлюза, но как насчет реализации службы для исходящего шлюза?

<int:gateway id="cafeService"
         service-interface="org.cafeteria.Cafe"
         default-request-channel="requestChannel"
         default-reply-channel="replyChannel"/>

1 ответ

Решение

Самый простой механизм - реализовать интерфейс службы в виде POJO и вызывать его из

<service-activator input-channel="..." output-channel="..." 
      ref="myPojo" method="process" />

где

public class MyPoJo {

    public Bar process(Foo foo) {

        ...

    }

}

Если вы хотите сделать это более формально, вы можете продлить AbstractReplyProducingMessageHandler, И оберните его в конечную точку потребителя, но большинство предпочитают маршрут POJO, потому что тогда у вас не будет никаких каркасных зависимостей.

РЕДАКТИРОВАТЬ:

Если вы используете Spring Tool Suite (основанный на Eclipse), существует стартовый проект, который поможет вам построить полноценный шлюз с использованием шаблона; включает в себя начальные классы для анализаторов пространства имен и все (New | Spring | Spring Project | Integration ...). Шаблон размещен здесь. Они немного устарели (например, требуется обновление SI, и мы больше не используем docbook - по крайней мере, на master - мы используем asciidoc), но это займет у вас долгий путь. Вы также можете посмотреть на стандартные парсеры для помощи с пространством имен.

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

EDIT2:

Из вашего комментария...

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

Обычно это так, но ничто не мешает вам вызывать внешнюю службу через <service-activator/> - это вопрос личных предпочтений, и нет реальной причины создавать официальный адаптер, если вы не хотите публиковать его для использования в своей организации и / или вносить в сообщество более формальным образом.

Другие вопросы по тегам