полная миграция jms:listener на JavaConfig

Как говорится в названии..

Я прочитал это ценное Как добавить несколько JMS MessageListners в одном MessageListenerContainer для ссылки Spring Java Config

Автор этого поста работает через

messageListenerContainer.setMessageListener(new TaskFinished());

Кстати: я использую

@Autowired
private ConsumerListener consumerListener;

defaultMessageListenerContainer.setMessageListener(consumerListener);

Я не использую оператор new.

ОК, ограничение метода setMessageListener таково: класс должен реализовывать интерфейс MessageListener, я протестировал и работает

Моя проблема в том, что в соответствии с 23.6 Поддержка пространства имен JMS

Как представить следующее:

<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>
<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>

через яваконфиг?

Это простые pojo (см. атрибуты ref и method)

Я хочу использовать как вариант простого pojo (@Component или @Service) вместо объекта MessageListener

В DefaultMessageListenerContainer API, нет ничего, что могло бы обойти это требование или ситуацию.

Заранее спасибо..


person Manuel Jordan    schedule 07.08.2014    source источник


Ответы (1)


<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>

Этот xml использует MessageListenerAdapter, который вы можете передать делегату (ref и метод для выполнения (по умолчанию 'handleMessage`).

@Configuration
public MyJmsConfiguration {

    @Bean
    public DefaultMessageListenerContainer consumerJmsListenerContainer() {

        DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
        ...
        MessageListenerAdapter listener = new MessageListenerAdapter();
        listener.setDelegate(orderService());
        listener.setDefaultListenerMethod("placeOrder");
        dmlc.setMessageListener(listener);
        return dmlc;
}

Чтобы использовать его из конфигурации Java, используйте что-то вроде приведенного выше фрагмента.

person M. Deinum    schedule 07.08.2014
comment
Спасибо, Мартен, это работает!.. Я отредактировал вашу возвращаемую переменную, она должна быть dmlc, а не слушателем. еще раз спасибо - person Manuel Jordan; 07.08.2014