有没有办法在不等待SedaConsumer
返回的情况下停止BlockingQueue.take(pollTimeout, ...)
?我的应用程序中有很多sedas,优雅的关闭需要花费很多时间。当DefaultShutdownStrategy
关闭sedaConsumers
时,队列中不再有消息,并且不会再生成消息(因为之前关闭的路由实现)。因此每个sedaConsumer
必须等待大约1秒钟。
是否可以强制doStop而不是prepareShutdown用于seda?或者打断工作人员的线程?
我知道我可以减少pollTimeout
,但我担心它会影响运行时性能。
答案 0 :(得分:1)
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,因此如果消费者正在停止并被中断,它将会正常停止。