完整的jms:监听器迁移到JavaConfig

时间:2014-08-07 03:50:06

标签: spring spring-3 spring-jms spring-4

就像标题所说..

我已阅读此有价值的How to add multiple JMS MessageListners in a single MessageListenerContainer for Spring Java Config链接

该帖子的作者正在完成

messageListenerContainer.setMessageListener(new TaskFinished());

BTW:我用

@Autowired
private ConsumerListener consumerListener;

defaultMessageListenerContainer.setMessageListener(consumerListener);

我没有使用运算符。

好的, setMessageListener 方法的限制是:该类必须实现 MessageListener 接口,我已经测试并运行

根据23.6 JMS Namespace Support

,我的问题是

如何表示以下内容:

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

通过JavaConfig?

它们是简单的pojo(请参阅refmethod属性)

我想使用一个简单的pojo(@Component或@Service)选项而不是 MessageListener 对象

DefaultMessageListenerContainer API中,无法解决此要求或情况。

提前致谢..

1 个答案:

答案 0 :(得分:6)

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

这个xml使用MessageListenerAdapter你可以交给一个委托(ref和一个方法来执行(默认&#39; 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配置中使用它,请使用类似上面的代码段。