我正在开发一个Spring Boot应用程序,我打算在其中使用来自多个队列的JMS消息 - 但是我想控制处理这些消息的执行线程的总数,而不是控制每个JMS队列执行的线程数 .
简而言之:大量的JMS队列 . 一个线程池来进行处理 .
有些队列比其他队列更繁忙(有些可能总是有工作,有些则长时间闲置) - 所以我想利用可用的处理能力做任何需要完成的工作,无论源队列如何 .
我已经使用具有固定池大小的共享 TaskExecutor
设置了一系列 DefaultMessageListenerContainer
. 我观察到的行为是,一个队列将消耗所有可用的插槽 - 然后(即使当第一个队列变空)时,插槽也要使用.'t become available for the other queues' DefaultMessageListenerContainer
s .
这是在javadocs for DefaultMessageListenerContainer.setTaskExecutor()中详细说明的:
普通线程池不会添加太多值,因为此侦听器容器将在其整个生命周期中占用多个线程 .
-
有办法解决这个问题吗?它在javadocs中提到的"J2EE environment"中的工作方式有何不同?
-
我可以做一些像
MessageListenerContainer
这样可以消耗多个队列的东西吗? -
如果我想要的是可能的 - 那么是否可以应用一些排序,从而在先前空闲的队列上接收的消息可以被赋予更高的优先级?
1 回答
我试图重新创建你的问题,但我不能 . 可能是因为您在此问题中缺少源代码 . 但这就是我的尝试 .
而我得到的输出是;
如果我错了,请纠正我但是使用这种配置我没有看到任何问题 . 两个队列和一个任务 Actuator .