尝试调用错误的处理程序后,Spring AMQP处理间歇性地失败

时间:2017-08-09 03:59:15

标签: java spring rabbitmq spring-rabbitmq

我正在通过Rabbitmq进行通信的组件之间执行集成测试。 我有一个使用此处理程序方法的消费者:

@RabbitHandler
public List<Call> handle(CallRecordMonthRequest request){
    return source.getCalls(request.getMonth(), request.getYear());
}

但是,有时当消费者尝试处理消息时,它会失败并出现以下异常:

  

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException:无法使用参数类型= [class [B],value = [{[B @ 7d202207}]]调用目标方法'handle'       ...       ...       ...       引起:java.lang.NoSuchMethodException:org.rainn.reporting.communication.RabbitMqAdapter.handle([B]

我添加了一个处理程序,它接受byte[],当我把它变成一个字符串时,它是相同的json有效负载,意味着被反序列化为正确的类型。

1 个答案:

答案 0 :(得分:0)

这可能意味着错误消息没有contentType属性。 Jackson2JsonMessageConverter会将任何没有内容类型的消息(或者包含不包含字符串json的消息)作为byte[]返回。

消息通常应为contentType application/json

如果您无法修复发件人,则可以对转换器进行子类化,并覆盖fromMessage,如下所示...

public Object fromMessage(Message message, Object conversionHint) throws MessageConversionException {
    MessageProperties properties = message.getMessageProperties();
    if (properties.getContentType == null) {
        properties.setContentType("application/json");
    }
    super.fromMessage(message, conversionHint);
}