2017-10-10 8 views
0

Je souhaite traiter les messages d'une file d'attente lorsqu'ils ont un certain format et peuvent être désérialisés en une certaine classe Java. Pour ce faire, j'ai créé la méthode suivante.Gestionnaire générique pour MessageConversionException

@JmsListener(destination = "myQueue", containerFactory = "myFactory") 
public void receiveMessage(Message message) { 
    service.process(message); 
} 

Cependant, lorsque les messages ne peuvent pas être désérialisé à une instance de la classe de message, et je reçois un org.springframework.messaging.converter.MessageConversionException, je veux gérer cette exception et enregistrer le contenu du message. Quelle est la manière standard de le faire? Existe-t-il une annotation pour définir une méthode pour cela?

Répondre

2

Vous pouvez ajouter un ErrorHandler personnalisé à l'usine de conteneur d'écoute - voir Annotation-driven listener endpoints.

@Configuration 
@EnableJms 
public class AppConfig { 

     @Bean 
     public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() { 
       DefaultJmsListenerContainerFactory factory = 
           new DefaultJmsListenerContainerFactory(); 
       factory.setConnectionFactory(connectionFactory()); 
       factory.setDestinationResolver(destinationResolver()); 
       factory.setConcurrency("3-10"); 
       return factory; 
     } 
} 

Ajouter factory.setErrorHandler(myErrorHandler()).

+0

Merci beaucoup @Gary, est-il possible d'accéder au contenu du message depuis le gestionnaire? – Andres

+0

Je ne crois pas que l'exception de conversion a une référence au message original; Je pense que vous devriez envelopper le convertisseur de message dans le vôtre, attraper l'exception et lancer une nouvelle exception avec le 'Message' en tant que propriété. –

+0

Excellent. Merci! – Andres