Ошибка типа аргумента с приемником 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}]

Из моего поиска я так понимаю, что это потому, что есть несовместимость класса с типом сообщения? Однако я не могу увидеть, где это.

Ниже приведены соответствующие сегменты кода:

@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 + ">");
    }
}

Я попытался установить класс сообщения на Byte[], но результат тот же. Я уверен, что упускаю что-то простое - просто не уверен, что это такое!


person skyman    schedule 26.09.2018    source источник


Ответы (1)


Jackson2JsonMessageConverter будет выполнять преобразование только в том случае, если сообщение имеет заголовок content_type, содержащий json.

В противном случае он вернет byte[].

byte[] также не будет преобразовано в Byte[]. Установите заголовок или используйте byte[].

person Gary Russell    schedule 26.09.2018
comment
Спасибо за это, однако исключение, похоже, выдается при запуске приложения, а не при получении сообщений - я думаю, возможно, что сообщение уже находится в очереди - проверим - person skyman; 27.09.2018
comment
Кажется, это решило проблему. Я просто хотел сказать, как я благодарен за то, что такие разработчики, как вы, находят время, чтобы помогать другим так же, как и вы. Это невероятно щедро. - person skyman; 27.09.2018