3

就像标题说的那样。。

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

那篇文章的作者正在努力

messageListenerContainer.setMessageListener(new TaskFinished());

顺便说一句:我用

@Autowired
private ConsumerListener consumerListener;

defaultMessageListenerContainer.setMessageListener(consumerListener);

我没有使用new运算符。

OK,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(参见refmethod属性)

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

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

提前致谢..

4

1 回答 1

6
<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 配置中使用它,请使用上面的代码片段。

于 2014-08-07T05:43:31.237 回答