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