2016-11-27 3 views
0

Класс весной JMS имеет метод настройки setMessageConverter(...), который позволяет поставлять любой конвертер, который мы хотим.Преобразователь сообщений Spring JMS для DefaultMessageListenerContainer

Для аннотированных сообщений слушателя, это имеет смысл, как мы можем непосредственно определить

@JmsListener(destination = "myDestination") 
public void processOrder(MyConvertedType data) { ... } 

и весна будет заботиться о преобразовании и передавая сообщение этого слушателя.

Таким образом, это явно имеет смысл для аннотированного слушателя. Мой вопрос заключается в настройке конвертера сообщений, полезного для прослушивателей без аннотированных сообщений? Что-то вроде

public void registerListener(String queueName, MessageListener listener) { 
     DefaultMessageListenerContainer container = new DefaultMessageListenerContainer(); 
     container.setConnectionFactory(connectionFactory); 
     container.setMessageConverter(getMessageConverter()); 
     container.setDestinationName(queueName); 
     container.setMessageListener(listener); 
     container.initialize(); 
     container.start(); 
} 

Из моего поиска в Docs/Javadocs и ограниченном понимании исходного кода, я думаю, что установка сообщения конвертера для этого случая не является полезным, т.е. преобразование сообщений не будет обрабатываться весной. Преобразование должно обрабатываться в переданном обратном вызове MessageListener? Поправьте меня, если я ошибаюсь.

ответ

1

Используется только при создании контейнера для поддержки аннотации @JmsListener - конвертер передается из фабрики контейнеров в контейнер, а оттуда - в MessagingMessageListenerAdapter, который используется для вызова аннотированного метода POJO.

Контейнер - это всего лишь трубопровод для конфигурирования адаптера через фабрику контейнеров.

Итак, да, это игнорируется для простого MessageListener.

Смежные вопросы