Merge pull request #260 from bsinno/feature_allow_to_use_other_exception_handler

Allow to set error handler or take default one
This commit is contained in:
Michael Hirsch
2016-08-01 16:45:21 +02:00
committed by GitHub
3 changed files with 28 additions and 5 deletions

View File

@@ -10,8 +10,12 @@ package org.eclipse.hawkbit.autoconfigure.amqp;
import org.eclipse.hawkbit.amqp.AmqpConfiguration; import org.eclipse.hawkbit.amqp.AmqpConfiguration;
import org.eclipse.hawkbit.amqp.annotation.EnableAmqp; import org.eclipse.hawkbit.amqp.annotation.EnableAmqp;
import org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.util.ErrorHandler;
/** /**
* The amqp autoconfiguration. * The amqp autoconfiguration.
@@ -24,4 +28,15 @@ import org.springframework.context.annotation.Configuration;
@EnableAmqp @EnableAmqp
public class AmqpAutoConfiguration { public class AmqpAutoConfiguration {
/**
* Create default error handler bean.
*
* @return the default error handler bean
*/
@Bean
@ConditionalOnMissingBean
public ErrorHandler errorHandler() {
return new ConditionalRejectingErrorHandler();
}
} }

View File

@@ -37,7 +37,8 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.retry.backoff.ExponentialBackOffPolicy; import org.springframework.retry.backoff.ExponentialBackOffPolicy;
import org.springframework.retry.support.RetryTemplate;; import org.springframework.retry.support.RetryTemplate;
import org.springframework.util.ErrorHandler;
/** /**
* The spring AMQP configuration which is enabled by using the profile * The spring AMQP configuration which is enabled by using the profile
@@ -263,13 +264,16 @@ public class AmqpConfiguration {
/** /**
* Returns the Listener factory. * Returns the Listener factory.
* *
* @param errorHandler
* the error hander
* @return the {@link SimpleMessageListenerContainer} that gets used receive * @return the {@link SimpleMessageListenerContainer} that gets used receive
* AMQP messages * AMQP messages
*/ */
@Bean(name = { "listenerContainerFactory" }) @Bean(name = { "listenerContainerFactory" })
public RabbitListenerContainerFactory<SimpleMessageListenerContainer> listenerContainerFactory() { public RabbitListenerContainerFactory<SimpleMessageListenerContainer> listenerContainerFactory(
return new ConfigurableRabbitListenerContainerFactory(amqpProperties, rabbitConnectionFactory); final ErrorHandler errorHandler) {
return new ConfigurableRabbitListenerContainerFactory(amqpProperties, rabbitConnectionFactory, errorHandler);
} }
private static Map<String, Object> getTTLMaxArgsAuthenticationQueue() { private static Map<String, Object> getTTLMaxArgsAuthenticationQueue() {

View File

@@ -12,6 +12,7 @@ import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFacto
import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory; import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.util.ErrorHandler;
/** /**
* {@link RabbitListenerContainerFactory} that can be configured through * {@link RabbitListenerContainerFactory} that can be configured through
@@ -28,10 +29,13 @@ public class ConfigurableRabbitListenerContainerFactory extends SimpleRabbitList
* for the container factory * for the container factory
* @param amqpProperties * @param amqpProperties
* to configure the container factory * to configure the container factory
* @param errorHandler
* the error handler which should be use
*/ */
public ConfigurableRabbitListenerContainerFactory(final AmqpProperties amqpProperties, public ConfigurableRabbitListenerContainerFactory(final AmqpProperties amqpProperties,
final ConnectionFactory rabbitConnectionFactory) { final ConnectionFactory rabbitConnectionFactory, final ErrorHandler errorHandler) {
this.amqpProperties = amqpProperties; this.amqpProperties = amqpProperties;
setErrorHandler(errorHandler);
setDefaultRequeueRejected(true); setDefaultRequeueRejected(true);
setConnectionFactory(rabbitConnectionFactory); setConnectionFactory(rabbitConnectionFactory);
setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal()); setMissingQueuesFatal(amqpProperties.isMissingQueuesFatal());