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

sky*_*man 1 spring rabbitmq spring-amqp

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

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

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

以下是相关的代码段:

@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");
}
Run Code Online (Sandbox Code Playgroud)

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

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

Gar*_*ell 8

所述Jackson2JsonMessageConverter,如果消息具有将只执行转换content_type,其中包含报头json

否则,它将返回byte[]

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

  • 这似乎解决了这个问题。我只是想说我很感激像你这样的开发人员花时间以你的方式帮助他人。这是令人难以置信的慷慨。 (3认同)