【发布时间】:2012-12-05 21:24:29
【问题描述】:
我目前正在将 JMS 支持添加到类似应用程序服务器的框架中。 JMS 将由 HornetQ(独立代理,服务器类路径上的 hornetq jars)实现,但既没有 JBoss,也没有 spring,也没有其他任何可以提供 MDB 的东西。
下一步是将消息侦听器添加到允许并行处理传入消息的 xa 队列。有些消息会启动长时间运行的任务,因此基本思想是从 onMessage 方法生成工作线程。
在我漫长的互联网之旅中,我遇到了this discussion,其中一位参与者提到,他不会这样做,而是使用额外的内部队列来完成任务:(单线程)消息侦听器会简单地抓取来自入站队列的消息并为内部队列创建新消息,在该内部队列的另一端,一些工作线程争夺传入消息。一旦入站消息被“复制”到内部队列(这对我来说没问题),就会得到确认。
不幸的是,他们没有说为什么最好不要从onMessage 方法产生工作线程 - 也许是因为如果池中的所有线程都忙,侦听器会阻塞。所以我正在寻找设计决策的利弊:
- 从消息监听器的 onMessage 方法启动工作线程
- 使用内部队列“向工作线程发送消息”
【问题讨论】:
标签: java queue jms message-listener