Spring Integration 5.07 Использование Java DSL для моста между двумя очередями JMS

Мне нужно регулировать перемещение сообщений между некоторыми очередями JMS (activeMQ), чтобы гарантировать, что я не переполню внешнюю службу, используемую во время обработки сообщений.

Я делал это в прошлом с Camel, но, учитывая, что в остальном этот проект полностью основан на Spring, я подумал, что порадовал бы весеннюю интеграцию.

Я рад видеть, что в 5.0.7 Java DSL находится в ядре, и я действительно хотел бы использовать его вместо xml.

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

Может ли кто-нибудь указать мне на какой-либо текущий пример использования java DSL для создания каналов, которые я могу использовать для потребления и создания сообщений с ... а затем использовать позже в мосте с некоторым примененным дросселированием?


person mmeyer    schedule 10.08.2018    source источник


Ответы (1)


Что ж, похоже, что в нашей главе JMS в Справочном руководстве утечки образцов Java DSL, аналогично тому, что мы имели до сих пор с AMQP, например:

https://docs.spring.io/spring-integration/docs/5.0.7.RELEASE/reference/html/amqp.html#_configuring_with_the_java_dsl_2

https://docs.spring.io/spring-integration/docs/5.0.7.RELEASE/reference/html/amqp.html#_configuring_with_the_java_dsl_4

Я считаю, что мы можем добавить аналогичные параграфы и в главу JMS. Пожалуйста, поднимите JIRA по этому поводу, и мы скоро его рассмотрим. Тем временем я предлагаю вам открыть org.springframework.integration.jms.dsl.Jms фабрику для использования подходящим строителем.

С другой стороны, я могу предложить вам взглянуть на существующий тестовый пример некоторых возможных конфигураций: https://github.com/spring-projects/spring-integration/blob/master/spring-integration-jms/src/test/java/org/springframework/integration/jms/dsl/JmsTests.java

Например, для чтения из очереди вам нужна такая конфигурация:

    @Bean
    public IntegrationFlow jmsMessageDrivenFlow() {
        return IntegrationFlows
                .from(Jms.messageDrivenChannelAdapter(jmsConnectionFactory(), DefaultMessageListenerContainer.class)
                        .outputChannel(jmsMessageDrivenInputChannel())
                        .destination("jmsMessageDriven")
                .configureListenerContainer(c -> c.clientId("foo")))
                .<String, String>transform(String::toLowerCase)
                .channel(jmsOutboundInboundReplyChannel())
                .get();
    }

Для отправки в JMS вам понадобится что-то вроде этого:

    @Bean
    public IntegrationFlow jmsOutboundFlow() {
        return f -> f
                .handle(Jms.outboundAdapter(jmsConnectionFactory())
                        .destinationExpression("headers." + SimpMessageHeaderAccessor.DESTINATION_HEADER)
                        .configureJmsTemplate(t -> t.id("jmsOutboundFlowTemplate")));
    }
person Artem Bilan    schedule 10.08.2018