Используйте Spring Integration DSL для чтения из раздела Tibco EMS

Я пытался настроить весеннюю интеграцию dsl для чтения из темы Tibco EMS, выполнить некоторую обработку полученного сообщения, а затем отправить его в очередь ActiveMQ. Мне удалось успешно настроить это с помощью конфигурации XML, но вместо этого я хотел использовать Spring Integration dsl. Я не мог понять, и не мог найти никакой помощи в Интернете по этому поводу.

Моя конфигурация для отправки сообщения в ActiveMQ примерно такая:

@Bean
public IntegrationFlow toActiveMQFlow(
        MessageChannel channel,
        ActiveMQQueue queue,
        CachingConnectionFactory cachingConnectionFactory) {
    return IntegrationFlows.from(channel)
            .transform(Object::toString)
            .handle(Jms.outboundAdapter(cachingConnectionFactory).destination(queue))
            .get();
}

И я думаю, что конфигурация для чтения из тем Tibco EMS должна быть примерно такой -

@Bean
public IntegrationFlow fromTibcoTopicFlow(
        MessageChannel channel,
        ConnectionFactory tibcoEmsConnectionFactory,
        Topic tibcoTopic
) {
    return IntegrationFlows
            .from(SomeInboundAdapter(tibcoEmsConnectionFactory).destination(tibcoTopic))
            .transform(Object::toString)
            .channel(channel)
            .get();
}

Поскольку я не нашел особой помощи по последней конфигурации, является ли здесь единственным вариантом использования конфигурации XML?

Пожалуйста, исправьте / отредактируйте / укажите на любые ошибки, которые я допустил, все еще изучая Spring Integration DSL.

Ценю вашу помощь!


person Adee J    schedule 08.11.2018    source источник
comment
Разве tibcoEmsConnectionFactory тоже не касается JMS? Jms.messageDrivenChannelAdapter() Вам не подходит?   -  person Artem Bilan    schedule 08.11.2018
comment
Каков ваш XML по этому поводу, кстати?   -  person Artem Bilan    schedule 08.11.2018
comment
Я пробовал использовать Jms.inboudAdapter и Jms.messageDrivenChannelAdapter, но продолжаю получать эту ошибку компиляции - Cannot resolve method 'from(org.springframework.integration.dsl.jms.JmsMessageDrivenChannelAdapterSpec.JmsMessageDrivenChannelAdapterListenerContainerSpec<org.springframework.integration.dsl.jms.JmsDefaultListenerContainerSpec,org.springframework.jms.listener.DefaultMessageListenerContainer>)' Я использую spring-integration-core 5.0.7.RELEASE и spring-integration-java-dsl 1.2.2.RELEASE   -  person Adee J    schedule 08.11.2018
comment
Начиная с версии Spring Integration 5.0 вам не следует использовать этот дополнительный артефакт для Java DSL. Теперь он включен в основной проект. См. github.com/spring -projects / Spring-integration-java-dsl / wiki /: This project has been absorbed by Spring Integration Core starting with version 5.0.   -  person Artem Bilan    schedule 08.11.2018


Ответы (1)


Вам нужно использовать Jms.messageDrivenChannelAdapter(ConnectionFactory connectionFactory).

И не мог использовать spring-integration-java-dsl. Он был объединен с основным проектом, начиная с версии 5.0: https://docs.spring.io/spring-integration/docs/5.0.9.RELEASE/reference/html/whats-new.html#_java_dsl

Мы устранили проблему со старой Java DSL jar в пути к классам: https://jira.spring.io/browse/INT-4551

person Artem Bilan    schedule 08.11.2018
comment
Спасибо @ArtemBilan, после удаления артефакта spring-integration-java-dsl я смог настроить как минимум подключение к Tibco EMS. Я создал DefaultMessageListenerContainer с TibjmsConnectionFactory и TibjmsTopic и передал его Jms.messageDrivenChannelAdapter. Но теперь после запуска приложения у меня в логах все время появляется это сообщение об ошибке - o.s.j.l.DefaultMessageListenerContainer : Setup of JMS message listener invoker failed for destination 'Topic[tibcoTopic]' - trying to recover. Cause: Not permitted. - person Adee J; 09.11.2018
comment
Cause: Not permitted - это что-то специфическое для Tibco, я думаю, и оно уже выходит за рамки интеграции Spring. - person Artem Bilan; 09.11.2018
comment
Проверил у моего администратора Tibco и выяснил, что они не позволяют нам создавать постоянных подписчиков, отсюда и ошибка Не разрешено. Теперь мне придется использовать JNDI, чтобы все заработало. Спасибо @ArtemBilan за ваш вклад. - person Adee J; 09.11.2018