2017-05-09 3 views
1

Ich verwende Spring Boot 1.4.1-RELEASE und RabbitMQ 3.2.3. Meine Application-Klasse sieht wie folgt aus -Behandeln Sie die Ausnahmen in RabbitMQ Spring Boot-Anwendung

@SpringBootApplication 
@EnableAutoConfiguration 
public class EventStoreMessageDeliveryApplication { 

    public final static String queueName = "customer.default.queue"; // spring-boot 

    @Bean 
    Queue queue() { 
     return new Queue(queueName, true); 
    } 

    @Bean 
    FanoutExchange exchange() { 

     return new FanoutExchange("customer.events.fanout.exchange", true, false); // spring-boot-exchange 
    } 

    @Bean 
    Binding binding() { 

     return new Binding(queueName, Binding.DestinationType.QUEUE, "customer.events.fanout.exchange", "*.*", null); 
    } 

    @Bean 
    public ConnectionFactory connectionFactory() { 

     CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost"); 
     connectionFactory.setPublisherConfirms(true); 

     return connectionFactory; 
    } 

    @Bean 
    SimpleMessageListenerContainer container(MessageListenerAdapter listenerAdapter) { 

     SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
     container.setConnectionFactory(connectionFactory()); 
     container.setQueueNames(queueName); 
     container.setMessageListener(listenerAdapter); 
     container.setRecoveryBackOff(new ExponentialBackOff(3000, 2)); 
     return container; 
    } 

    @Bean 
    MessageListenerAdapter listenerAdapter(Receiver receiver) { 

     return new MessageListenerAdapter(receiver, "receiveMessage"); 
    } 

    public static void main(String[] args) throws InterruptedException { 

     SpringApplication.run(EventStoreMessageDeliveryApplication.class, args); 
    } 
} 

Und meine Zuhörer Klasse aussieht -

@Component 
public class Receiver { 

    private CountDownLatch latch = new CountDownLatch(1); 

    public void receiveMessage(String message) { 

     System.out.println("Received <" + message + ">"); 

      // do something 

     latch.countDown(); 
    } 

    public CountDownLatch getLatch() { 

     return latch; 
    } 

} 

ich die Ausnahmen behandeln wollen wie Verbindung abgelehnt, die kommen können, wenn der Makler nach unten. Wie kann ich mit solchen Ausnahmen umgehen? Ich bin nicht sicher, wo ich den Griff für die Ausnahmen bekommen kann.

Antwort

0

Sie können eine SimpleRabbitListenerContainerFactory erstellen. Dies ist im Grunde ein Listener für Ereignisse von RabbitConnectionFactory.

@Bean 
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() { 
     SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); 
     factory.setConnectionFactory(connectionFactory()); 
     factory.setErrorHandler(rabbitErrorHandler()); 
     return factory; 
    } 

rabbitErrorHandler() kann eine Bohne der Umsetzung der org.springframework.util.ErrorHandler zurückzukehren. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/ErrorHandler.html

Verwandte Themen