2017-10-10 111 views
0

我想在隊列中具有特定格式並可以反序列化到某個Java類時處理隊列中的消息。爲了做到這一點,我創建了以下方法。MessageConversionException的通用處理程序

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

然而,當消息不能被反序列化到消息類的實例,我也得到一個org.springframework.messaging.converter.MessageConversionException,我想處理該異常並記錄消息的內容。什麼是標準的做法呢?有沒有任何註釋來爲其定義方法?

回答

2

您可以將自定義ErrorHandler添加到聽衆容器工廠 - 請參閱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; 
     } 
} 

添加factory.setErrorHandler(myErrorHandler())

+0

非常感謝@加里,有沒有辦法從處理程序訪問消息內容? – Andres

+0

我不相信轉換異常對原始消息的引用;我認爲你必須自己封裝消息轉換器,捕獲異常並用'Message'作爲屬性拋出一個新的異常。 –

+0

非常好。謝謝! – Andres