Nano Hash - криптовалюты, майнинг, программирование

spring интеграция - несколько шлюзов

В моем проекте у меня будет два входящих шлюза с одинаковыми входными параметрами, но разными ответами. Каждый шлюз называется объявленным в другом xml. Проблема в том, что когда я вызываю gateway1, он переходит на xml2 вместо xml1. Как мы должны справиться с этим. Иметь два шлюза в одном интерфейсе

public interface MessageGateway {
    @Gateway(requestChannel="requestChannel1")
    @Payload("#args")
    public Response1 invoke(Bean bean) throws Exception;

    @Gateway(requestChannel="requestChannel2")
    @Payload("#args")
    public List<Response2> invoke2(Bean bean) throws Exception;

}

В xml1

<int:gateway id="invoke" default-request-channel="requestChannel1" default-reply-channel="finalResult"
                 service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000"/>
    <int:channel id="errorChannel"/>

В xml2

<int:gateway id="invoke1" default-request-channel="requestChannel2" default-reply-channel="finalResult"
                     service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000"/>
        <int:channel id="errorChannel"/>

Звоню на шлюз из другой системы. Поэтому я автоматически подключаю интерфейс шлюза и вызываю методы.

Согласно комментарию Гэри, добавляющему автопроводку

@Autowired
private MessageGateway gateway;
//calling
gateway.invoke(bean);

  • Покажите свою автопроводку для обоих шлюзов. 15.06.2017
  • Вероятно, лучше поместить методы в разные интерфейсы, чтобы избежать путаницы. При такой конфигурации у обоих шлюзов есть 2 метода. 15.06.2017
  • Это автоматическое подключение должно завершиться ошибкой - у вас есть 2 компонента invoke и invoke1. Spring не знает, какой выбрать для проводки авто. Вам либо нужен только один <gateway/>, либо вы должны поместить методы в отдельные интерфейсы. 15.06.2017

Ответы:


1

Смотреть. вам не нужны два определения <gateway> для одного и того же интерфейса.

Если вас беспокоит requestChannel, вы можете использовать это свойство в аннотации @Gateway или подэлементе <method> элемента <gateway>.

В случае двух <gateway> похоже, что второй побеждает, и у нас есть прокси только для этой части конфигурации.

15.06.2017
  • Спасибо Артем за объяснение. Но как мне убедиться, что я вызываю правильный шлюз и связанный с ним xml. 15.06.2017
  • Не уверен в вашем вопросе. Просто создайте один <gateway> и укажите конкретные request-channel для каждого @Gateway метода. 15.06.2017

  • 2

    Решение состоит в том, чтобы объявить подэлемент метода. См. также loadBrokerGateway здесь: http://docs.spring.io/spring-integration/docs/2.0.0.RC1/reference/html/gateway.html.

    Итак, XML1

    <int:gateway id="invoke" default-request-channel="requestChannel1" default-reply-channel="finalResult" service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000">
        <int:method name="invoke" request-channel="requestChannel1" />
    </int:gateway>
    <int:channel id="errorChannel"/>
    

    И XML2

    <int:gateway id="invoke1" default-request-channel="requestChannel2" default-reply-channel="finalResult" service-interface="<class name>" error-channel="errorChannel" default-reply-timeout="6000">
        <int:method name="invoke" request-channel="requestChannel2" />
    </int:gateway>
    <int:channel id="errorChannel"/>
    
    14.07.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..