如何在DefaultMessageListenerContainer中创建线程安全的MessageListener

时间:2014-11-12 12:57:33

标签: spring-integration spring-jms

我的MessageListener实现不是线程安全的。

当我尝试在具有多个使用者的DefaultMessageListenerContainer中连接它时,这会导致问题,因为所有使用者都共享相同的MessageListener对象。

有没有办法通过使DefaultMessageListener容器创建MessageListeners的多个实例来克服此问题,这样,MessageListener不会在使用者线程之间共享。

这样每个消费者线程都有自己的MessageListener实例。

请告知。

1 个答案:

答案 0 :(得分:1)

没有内置任何东西来支持这一点。通常认为最佳做法是使服务成为无状态(因此是线程安全的)。

如果那不可能,你需要创建一个包装器监听器;两种简单的方法是将监听器的实例存储在ThreadLocal中,或维护一个对象池,并在每条消息上从池中检索/返回实例。