avoid hanging in case of shutdown errors (SPR-7511)
This commit is contained in:
parent
416004b1bc
commit
d7e0776148
|
|
@ -977,36 +977,38 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe
|
|||
handleListenerSetupFailure(ex, true);
|
||||
}
|
||||
}
|
||||
synchronized (lifecycleMonitor) {
|
||||
decreaseActiveInvokerCount();
|
||||
lifecycleMonitor.notifyAll();
|
||||
}
|
||||
if (!messageReceived) {
|
||||
this.idleTaskExecutionCount++;
|
||||
}
|
||||
else {
|
||||
this.idleTaskExecutionCount = 0;
|
||||
}
|
||||
synchronized (lifecycleMonitor) {
|
||||
if (!shouldRescheduleInvoker(this.idleTaskExecutionCount) || !rescheduleTaskIfNecessary(this)) {
|
||||
// We're shutting down completely.
|
||||
scheduledInvokers.remove(this);
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Lowered scheduled invoker count: " + scheduledInvokers.size());
|
||||
}
|
||||
finally {
|
||||
synchronized (lifecycleMonitor) {
|
||||
decreaseActiveInvokerCount();
|
||||
lifecycleMonitor.notifyAll();
|
||||
clearResources();
|
||||
}
|
||||
else if (isRunning()) {
|
||||
int nonPausedConsumers = getScheduledConsumerCount() - getPausedTaskCount();
|
||||
if (nonPausedConsumers < 1) {
|
||||
logger.error("All scheduled consumers have been paused, probably due to tasks having been rejected. " +
|
||||
"Check your thread pool configuration! Manual recovery necessary through a start() call.");
|
||||
if (!messageReceived) {
|
||||
this.idleTaskExecutionCount++;
|
||||
}
|
||||
else {
|
||||
this.idleTaskExecutionCount = 0;
|
||||
}
|
||||
synchronized (lifecycleMonitor) {
|
||||
if (!shouldRescheduleInvoker(this.idleTaskExecutionCount) || !rescheduleTaskIfNecessary(this)) {
|
||||
// We're shutting down completely.
|
||||
scheduledInvokers.remove(this);
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Lowered scheduled invoker count: " + scheduledInvokers.size());
|
||||
}
|
||||
lifecycleMonitor.notifyAll();
|
||||
clearResources();
|
||||
}
|
||||
else if (nonPausedConsumers < getConcurrentConsumers()) {
|
||||
logger.warn("Number of scheduled consumers has dropped below concurrentConsumers limit, probably " +
|
||||
"due to tasks having been rejected. Check your thread pool configuration! Automatic recovery " +
|
||||
"to be triggered by remaining consumers.");
|
||||
else if (isRunning()) {
|
||||
int nonPausedConsumers = getScheduledConsumerCount() - getPausedTaskCount();
|
||||
if (nonPausedConsumers < 1) {
|
||||
logger.error("All scheduled consumers have been paused, probably due to tasks having been rejected. " +
|
||||
"Check your thread pool configuration! Manual recovery necessary through a start() call.");
|
||||
}
|
||||
else if (nonPausedConsumers < getConcurrentConsumers()) {
|
||||
logger.warn("Number of scheduled consumers has dropped below concurrentConsumers limit, probably " +
|
||||
"due to tasks having been rejected. Check your thread pool configuration! Automatic recovery " +
|
||||
"to be triggered by remaining consumers.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue