[英]Multithreaded JMS receiving in Spring
我正在尝试从队列中编写用于JMS消息处理的多线程实现。
我尝试过使用DefaultMessageListenerContainer和SimpleMessageListenerContainer类。
我遇到的问题是,无论我如何配置它,似乎只是一个MessageListener类的实例被实例化。 这迫使我不必要地编写无状态或线程安全的MessageListener实现,因为我将ListenerContainer配置为使用多个线程(concurrentConsumers = 8)。
有一个明显的解决方案,我忽略了吗?
这是设计的。 MessageListener
是一个你注入Spring的依赖项 - 它没有办法实例化新的。
这迫使我不必要地编写无状态或线程安全的messageListener实现
你觉得这听起来很糟糕。 制作MessageListener
是一个非常好的主意,Spring只是消除了做其他事情的诱惑。
也许这个答案为时已晚,但它可能会让那些正在寻找它的人受益。 简而言之,答案是使用CommonsPoolTargetSource
和ProxyFactoryBean
。
有关详细信息,请查看此链接: http : //forum.springsource.org/showthread.php?34595-MDB-vs-MDP-concurrency
如果您想为主题做类似的事情,请查看: https : //stackoverflow.com/a/12668538/266103
配置“concurrentConsumers”就足以同时处理消息。 这并不意味着您将拥有MessageListenerContainer的“n”个实例。 MessageListenerContainer可以在内部跨越“任务”来处理消息。 (可选)您可能必须相应地配置日志记录,以查看与基础任务/线程关联的信息。
有关更多详细信息,请参阅“ 在Spring中调整JMS消息消耗 ”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.