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

Как видно из названия

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

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

messageListenerContainer.setMessageListener(new TaskFinished());

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

@Autowired
private ConsumerListener consumerListener;

defaultMessageListenerContainer.setMessageListener(consumerListener);

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

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

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

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

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

через JavaConfig?

Они простые pojo (см. ref а также method атрибуты)

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

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

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

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, используйте что-то вроде приведенного выше фрагмента.

Другие вопросы по тегам