Написание Spring Integration в IBM MQ - PullRequest
1 голос
/ 06 мая 2020

Использование Boot 2.2.2 и Spring Integration 5.2.2, взаимодействие с другим приложением через IBM MQ Series 9; сообщения должны быть чисто текстовыми (не JMS). SI может правильно получать текстовые сообщения, однако я не могу передать MQ без заголовка JMS.

Используя JMS без SI, я могу написать чистое текстовое сообщение, используя;

    jmsTemplate.send(myQueue, new MessageCreator() {

        @Override
        public Message createMessage(Session session) throws JMSException {
            return session.createTextMessage(message);
        }
    });

При использовании SI у меня следующее:

    @Bean
    public IntegrationFlow toQueue(
            ConnectionFactory connectionFactory, 
            @Value("${app.outQueue}") String myQueue
    ) {
        return IntegrationFlows
            .from("myIncomingChannel")
            .headerFilter("*")
            .handle(
                Jms
                    .outboundAdapter(connectionFactory)
                    .configureJmsTemplate(jts -> jts.jmsMessageConverter(new SimpleMessageConverter()))
                    .extractPayload(true)
                    .destination(myQueue)
            )
            .get();
    }

Я пробовал 8 комбинаций;

  1. С / без configureJmsTemplate
  2. extractPayload истина или ложь.
  3. С / без headerFilter

Все тесты выдают мне сообщение JMS в очереди. Как заставить SI JMS писать текстовое сообщение?

1 Ответ

1 голос
/ 06 мая 2020

Я решил это, используя ответ из этого сообщения Как удалить заголовки Spring JMS Template по умолчанию при отправке сообщения в MQ?

рабочая версия;

.handle(
   Jms
      .outboundAdapter(connectionFactory)
      .destination("queue:///" + myQueue + "?targetClient=1")
   )
.get();
...