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

Man*_*dan 3 spring spring-3 spring-jms spring-4

就像标题所说..

我已经阅读了这个有价值的如何在单个MessageListenerContainer中为Spring Java Config链接添加多个JMS MessageListners

这篇文章的作者正在努力

messageListenerContainer.setMessageListener(new TaskFinished());
Run Code Online (Sandbox Code Playgroud)

顺便说一句:我用

@Autowired
private ConsumerListener consumerListener;

defaultMessageListenerContainer.setMessageListener(consumerListener);
Run Code Online (Sandbox Code Playgroud)

我没有使用新的运算符.

好的,setMessageListener方法的限制是:该类必须实现MessageListener接口,我已测试并正常工作

根据23.6 JMS命名空间支持,我的问题是

如何表示以下内容:

<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>
<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>
Run Code Online (Sandbox Code Playgroud)

通过JavaConfig?

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

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

DefaultMessageListenerContainer API中,没有任何东西可以解决此要求或情况.

提前致谢..

M. *_*num 6

<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>
Run Code Online (Sandbox Code Playgroud)

这个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;
}
Run Code Online (Sandbox Code Playgroud)

要从Java配置中使用它,请使用类似上面的代码段.