Java MessageConversionException的通用处理程序
当队列中的消息具有特定格式并且可以反序列化为特定Java类时,我希望处理这些消息。为此,我创建了以下方法Java MessageConversionException的通用处理程序,java,spring,jms,spring-jms,Java,Spring,Jms,Spring Jms,当队列中的消息具有特定格式并且可以反序列化为特定Java类时,我希望处理这些消息。为此,我创建了以下方法 @JmsListener(destination = "myQueue", containerFactory = "myFactory") public void receiveMessage(Message message) { service.process(message); } 但是,当消息无法反序列化到Message类的实例时,我会得到一个org.springframew
@JmsListener(destination = "myQueue", containerFactory = "myFactory")
public void receiveMessage(Message message) {
service.process(message);
}
但是,当消息无法反序列化到Message类的实例时,我会得到一个
org.springframework.messaging.converter.MessageConversionException
,我希望处理该异常并记录消息的内容。做这件事的标准方法是什么?是否有任何注释来定义该方法?您可以向侦听器容器工厂添加自定义的ErrorHandler
——请参阅
Add
factory.setErrorHandler(myErrorHandler())
我也有同样的问题,添加ErrorHandler
对我没有帮助。JMS队列仍试图无限期地处理失败消息
但是,我没有取消绑定@Payload参数,而是手动将其解组:
@Autowired
private MarshallingMessageConverter xmlMessageConverter;
...
@JmsListener(...)
public void fromQueue(@Payload javax.jms.Message jmsMessage,
@Header(value = "UUID", required = false) UUID uuid) {
try {
MyCustomeMessage message = (MyCustomeMessage) xmlMessageConverter.fromMessage(jmsMessage);
// process message ...
} catch (Exception e) {
LOGGER.error("Exception in Queue for message uuid [{}]", uuid, e);
}
}
当我更改了传入消息的结构,旧消息无法再处理时,我们遇到了这种情况。非常感谢@Gary,有没有办法从处理程序访问消息内容?我不相信转换异常引用了原始消息;我认为您必须自己包装消息转换器,捕获异常并抛出一个新异常,将
消息作为属性。非常好。谢谢
@Autowired
private MarshallingMessageConverter xmlMessageConverter;
...
@JmsListener(...)
public void fromQueue(@Payload javax.jms.Message jmsMessage,
@Header(value = "UUID", required = false) UUID uuid) {
try {
MyCustomeMessage message = (MyCustomeMessage) xmlMessageConverter.fromMessage(jmsMessage);
// process message ...
} catch (Exception e) {
LOGGER.error("Exception in Queue for message uuid [{}]", uuid, e);
}
}