我们正在进行JMS点对点设置。在这里,生产者比消费者快得多。在消费者端,我们有一个侦听器设置,只要代理上有记录,它就会在其中触发onMessage()
。
我们为onMessage()
中收到的每条消息生成线程。目前,我有一个maxpoolsize=2
的线程池,blocking queue
的大小为2000
。在某些情况下,不会。消耗的邮件数量超过了上述配置,并且由于阻塞队列中没有可用空间,邮件开始被拒绝。
为此,我计划在onMessage()
内添加一个阻止操作,以防止消耗新消息。片段:
public void onMessage(Message message) {
while( ! spaceAvailableInPoolQueue());//Wait here
//Actual work
}
根据我的理解,使用者从prefetch
缓冲区中获取消息。对于此缓冲区中的each
(或某些)消息,将触发一个事件并生成一个线程,该线程将在侦听器内部触发onMessage()。
此阻塞操作是否会timeout
用于从代理发送数据的基础线程?
还是在使用者结束超时时等待onMessage()完成的本地线程?
总的来说,这样做是正确的方法吗?