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