Spring AMQP 接收器的参数类型错误

Argument type error with Spring AMQP receiver

我的 Spring AMQP 应用程序在启动时记录了以下异常:

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Failed to invoke target method 'receiveMessage' with argument type = [class [B], value = [{[B@660cff44}]

根据我的搜索,我了解到这是因为 class 与消息类型不兼容?但是,我看不到这是哪里。

以下是相关代码段:

@Bean
public MessageConverter jsonMessageConverter(){
    return new Jackson2JsonMessageConverter();
}

@Bean
Queue queue() {
    return new Queue(config.getAMQPResultsQueue(), false);
}

@Bean
TopicExchange exchange() {
    return new TopicExchange(config.getAMQPResultsExchange());
}

@Bean
Binding binding(Queue queue, TopicExchange exchange) {
    return BindingBuilder.bind(queue).to(exchange).with("#");
}

@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames(config.getAMQPResultsQueue());
    container.setMessageListener(listenerAdapter);
    container.setMessageConverter(jsonMessageConverter());
    return container;
}

@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
    return new MessageListenerAdapter(receiver, "receiveMessage");
}

@Component
public class Receiver {
    public void receiveMessage(String message) {
        System.out.println("Received <" + message + ">");
    }
}

我试过将消息的 class 设置为 Byte[] 但结果是一样的。我确定我遗漏了一些简单的东西 - 只是不确定它是什么!

Jackson2JsonMessageConverter 仅在邮件具有包含 json.

content_type header 时才执行转换

否则会returnbyte[].

byte[]也不会转换为Byte[]。设置 header 或使用 byte[].

当我将 RabbitMQ 接口中的 属性 设置为 content-type 时,我 运行 陷入了这个问题(可以理解,因为 http 规范就是这样拼写的)。但是 RabbitMQ 有它的下划线。 content_type 是 属性 的名称,您必须在 RabbitMQ 界面中设置才能使用 HTTP Header Content-Type

发布消息