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