JMS通过在侦听器的onMessage内放置阻塞操作来降低消耗速度

时间:2018-11-22 13:13:06

标签: multithreading jms message-queue event-listener

场景

我们正在进行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()完成的本地线程? 总的来说,这样做是正确的方法吗?

0 个答案:

没有答案