MDB bean池与Spring JMS并发使用者

时间:2014-07-15 22:08:39

标签: spring thread-safety ejb-3.0 messaging spring-jms

我来自EJB背景,致力于MDB的异步消息处理。最近我被转移到使用Spring消息传递的项目。作为Spring JMS监听器的新手,在将并发语义与MDB进行比较时,我有点困惑。

MDB - 据我所知,我们不需要担心线程安全,它维护着一个MDB bean池(池大小是我们可以配置的)。每当新消息到达目的地(队列)时。 EJB容器从池中选择一个实例并处理该消息。

春天 - 我不确定我是否完全理解它。我们在容器中定义一个监听器类。我不知道它是否会使用一个新的listener-class实例处理每个进入的消息,或者它会创建一个新线程(就像我们在servlet中一样)?我困惑的另一件事是可配置参数concurrentConsumers,它类似于EJB容器中的bean池吗?

1 个答案:

答案 0 :(得分:1)

应用了Spring语义,因此在典型的情况下,你的监听器bean是一个单例,你必须自己保证线程安全。当然这很简单:如果你有这个

public class MDB implements MessageListener {
    public void onMessage(Message inMessage) {
        ...blablabla...
    }
}

现在你基本上可以拥有:

public class SpringMessageListener implements MessageListener {
    public void onMessage(Message inMessage) {
        MDB mdb = new MDB(...parameters MDB might need...);
        mdb.onMessage(inMessage);
    }   
}