diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java index 47ae8a2a..7d21d1a0 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java @@ -248,7 +248,7 @@ public abstract class AbstractMessageListenerContainer extends RabbitAccessor private long consumeDelay; - private OOMHandler oOMHandler = error -> System.exit(EXIT_99); + private JavaLangErrorHandler javaLangErrorHandler = error -> System.exit(EXIT_99); private volatile boolean lazyLoad; @@ -1149,19 +1149,19 @@ public abstract class AbstractMessageListenerContainer extends RabbitAccessor this.consumeDelay = consumeDelay; } - protected OOMHandler getOOMHandler() { - return this.oOMHandler; + protected JavaLangErrorHandler getJavaLangErrorHandler() { + return this.javaLangErrorHandler; } /** * Provide an OOMHandler implementation; by default, {@code System.exit(99)} is * called. - * @param oOMHandler the handler. + * @param javaLangErrorHandler the handler. * @since 2.2.12 */ - public void setOOMHandler(OOMHandler oOMHandler) { - Assert.notNull(oOMHandler, "'oOMHandler' cannot be null"); - this.oOMHandler = oOMHandler; + public void setjavaLangErrorHandler(JavaLangErrorHandler javaLangErrorHandler) { + Assert.notNull(javaLangErrorHandler, "'javaLangErrorHandler' cannot be null"); + this.javaLangErrorHandler = javaLangErrorHandler; } /** @@ -1992,18 +1992,18 @@ public abstract class AbstractMessageListenerContainer extends RabbitAccessor } /** - * A handler for {@link OutOfMemoryError} on the container thread(s). + * A handler for {@link Error} on the container thread(s). * @since 2.2.12 * */ @FunctionalInterface - public interface OOMHandler { + public interface JavaLangErrorHandler { /** * Handle the error; typically, the JVM will be terminated. * @param error the error. */ - void handle(OutOfMemoryError error); + void handle(Error error); } diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java index 47343fab..23879ea9 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java @@ -1093,8 +1093,8 @@ public class DirectMessageListenerContainer extends AbstractMessageListenerConta } } } - catch (OutOfMemoryError e) { // NOSONAR - getOOMHandler().handle(e); + catch (Error e) { // NOSONAR + getJavaLangErrorHandler().handle(e); throw e; } } diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/SimpleMessageListenerContainer.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/SimpleMessageListenerContainer.java index 161338d9..6e15c827 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/SimpleMessageListenerContainer.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/SimpleMessageListenerContainer.java @@ -1255,12 +1255,9 @@ public class SimpleMessageListenerContainer extends AbstractMessageListenerConta } } catch (Error e) { //NOSONAR - // ok to catch Error - we're aborting so will stop logger.error("Consumer thread error, thread abort.", e); - if (e instanceof OutOfMemoryError) { // NOSONAR - getOOMHandler().handle((OutOfMemoryError) e); - } publishConsumerFailedEvent("Consumer threw an Error", true, e); + getJavaLangErrorHandler().handle(e); aborted = true; } catch (Throwable t) { //NOSONAR diff --git a/src/reference/asciidoc/amqp.adoc b/src/reference/asciidoc/amqp.adoc index 15d8fadc..eb649774 100644 --- a/src/reference/asciidoc/amqp.adoc +++ b/src/reference/asciidoc/amqp.adoc @@ -5685,6 +5685,15 @@ a|image::images/tickmark.png[] a|image::images/tickmark.png[] a|image::images/tickmark.png[] +|javaLangErrorHandler +(N/A) + +|An `AbstractMessageListenerContainer.JavaLangErrorHandler` implementation that is called when a container thread catches an `Error`. +The default implementation calls `System.exit(99)`; to revert to the previous behavior (do nothing), add a no-op handler. + +a|image::images/tickmark.png[] +a|image::images/tickmark.png[] + |maxConcurrentConsumers (max-concurrency) @@ -5789,15 +5798,6 @@ a|image::images/tickmark.png[] a|image::images/tickmark.png[] a|image::images/tickmark.png[] -|oOMHandler -(N/A) - -|An `AbstractMessageListenerContainer.OOMHandler` implementation that is called when a container thread catches an `OutOfMemoryException`. -The default implementation calls `System.exit(99)`. - -a|image::images/tickmark.png[] -a|image::images/tickmark.png[] - |phase (phase) diff --git a/src/reference/asciidoc/whats-new.adoc b/src/reference/asciidoc/whats-new.adoc index df45b7da..26bbdb9c 100644 --- a/src/reference/asciidoc/whats-new.adoc +++ b/src/reference/asciidoc/whats-new.adoc @@ -38,7 +38,8 @@ See <> for more information. A new listener container property `consumeDelay` is now available; it is helpful when using the https://github.com/rabbitmq/rabbitmq-sharding[RabbitMQ Sharding Plugin]. -The default `OOMHandler` (out of memory handler) now calls `System.exit(99)`. +The default `JavaLangErrorHandler` now calls `System.exit(99)`. +To revert to the previous behavior (do nothing), add a no-op handler. See <> for more information.