如何加快seda关机?

时间:2015-04-13 16:52:30

标签: java apache-camel shutdown

有没有办法在不等待SedaConsumer返回的情况下停止BlockingQueue.take(pollTimeout, ...)?我的应用程序中有很多sedas,优雅的关闭需要花费很多时间。当DefaultShutdownStrategy关闭sedaConsumers时,队列中不再有消息,并且不会再生成消息(因为之前关闭的路由实现)。因此每个sedaConsumer必须等待大约1秒钟。

是否可以强制doStop而不是prepareShutdown用于seda?或者打断工作人员的线程?

我知道我可以减少pollTimeout,但我担心它会影响运行时性能。

1 个答案:

答案 0 :(得分:1)

SedaConsumer.java中:

        try {
            // use the end user configured poll timeout
            exchange = queue.poll(pollTimeout, TimeUnit.MILLISECONDS);
            // Omitted
        } catch (InterruptedException e) {
            LOG.debug("Sleep interrupted, are we stopping? {}", isStopping() || isStopped());
            continue;
        } catch (Throwable e) {
            if (exchange != null) {
                getExceptionHandler().handleException("Error processing exchange", exchange, e);
            } else {
                getExceptionHandler().handleException(e);
            }
        }

此构造最多位于线程中,可以抛出InterruptedException,因此如果消费者正在停止并被中断,它将会正常停止。