Spring Integration 2.2.3.RELEASE @ServiceActivator не вызывается

У меня есть устаревший код с этими версиями (версия Spring: 3.2.1.RELEASE и версия Spring Integration 2.2.3.RELEASE). Я хотел бы перенести все xml-конфигурации интеграции Spring в конфигурацию java. Перед тем, как начать миграцию, я провожу несколько тестов и борюсь с @ServiceActivator, который не работает. Мой пример:

@Configuration
@ImportResource("classpath*:integration-config.xml")
public static class IntegrationConfig {
    @Bean
    public MessageChannel queueChannel() {
        return new QueueChannel(5);
    }

    @Bean
    public MessageChannel pubSubChannel() {
        PublishSubscribeChannel publishSubscribeChannel = new PublishSubscribeChannel();
        publishSubscribeChannel.subscribe(new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println("First handler :" + message.getPayload());
            }
        });

        publishSubscribeChannel.subscribe(new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println("Second handler :" + message.getPayload());
            }
        });
     return publishSubscribeChannel;
    }
}

И :

@MessageEndpoint
public static class MessageEndpointDefintion {

    @ServiceActivator(inputChannel = "queueChannel")
    public void queueActivator(String payload) {
        System.out.println("Payload from queue : " + payload);
    }

    @ServiceActivator(inputChannel = "pubSubChannel")
    public void pubSubActivator(Message<String> message) {
        System.out.println("Payload from pub-sub :" + message.getPayload());
    }
}

Когда я отправляю сообщения по каналам, вызывается любой @ServiceActivator.

Как указано здесь:, добавление @EnableIntegration (доступного с версии 4 Spring Integration) может решить проблему, но в моем случае я использую версию 2.2.3, которая не предоставляет эту аннотацию. Если они предоставят эту аннотацию в этой версии, я думаю, мы сможем ее использовать, но как?

Другой вопрос: могу ли я обновить версию Spring Integration до 4 с той же версией Spring (3.2.1)? Спасибо

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

Я называю свою конфигурацию так: AbstractApplicationContext context = new AnnotationConfigApplicationContext(IntegrationConfig.class); и пример теста:

PublishSubscribeChannel publishSubscribeChannel;
publishSubscribeChannel = (PublishSubscribeChannel) context.getBean("pubSubChannel", MessageChannel.class);
publishSubscribeChannel.send(MessageBuilder.withPayload("==PUB-SUB-CHANNEL== ").build());

И integration-config.xml:

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.springframework.org/schema/c"
   xmlns:int = "http://www.springframework.org/schema/integration"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd">

<int:annotation-config/>

<xsd:element name = "annotation-config">
    <xsd:annotation>
        <xsd:documentation>
            Enables annotation support for Message Endpoints.
        </xsd:documentation>
    </xsd:annotation>
</xsd:element>

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
156
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не хватает того, чтобы добавить в конфигурацию XML это:

<int:annotation-config/>

<xsd:element name = "annotation-config">
    <xsd:annotation>
        <xsd:documentation>
            Enables annotation support for Message Endpoints.
        </xsd:documentation>
    </xsd:annotation>

К сожалению, в этой старой версии нельзя использовать простые аннотации. Весь механизм интеграции Spring запускается из XML.

И нет: вы не можете обновить Spring Integration без обновления Spring Framework.

В моем основном классе я использую конфигурацию аннотации: AbstractApplicationContext context = new AnnotationConfigApplicationContext(IntegrationConfig.class);

akuma8 13.11.2018 17:37

Что ж, вы не слушаете: Spring Integration по-прежнему не будет работать с простой конфигурацией Java и аннотациями. Вам нужно добавить хотя бы простой XML с этим тегом и @ImportResource на вашем @Configuration

Artem Bilan 13.11.2018 17:39

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

akuma8 13.11.2018 17:54

Теперь работает нормально, похоже, что использование @ServiceActivator для канала очереди вызывает некоторые проблемы, поскольку у нас есть способ определить опросчик внутри аннотации. Спасибо большое за вашу помощь

akuma8 13.11.2018 22:38

Правильно, вы не можете использовать QueueChannel для @ServiceActivator в той старой версии. Это становится доступным перед поданнотацией @Poller, начиная с версии 4.0.

Artem Bilan 13.11.2018 22:42

Как насчет использования аннотации @Gateway в этой старой версии? В документе (docs.spring.io/autorepo/docs/spring-integration/…) не указано, как его включить. При объявлении его в файле xml он отлично работает, но не с аннотацией. Боб не найден.

akuma8 14.11.2018 12:51

Правильно, вам все равно нужно объявить это в xml.

Artem Bilan 14.11.2018 13:59

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