Как получить свойства сообщения с помощью Spring RabbitMQ MessageListener - PullRequest
0 голосов
/ 23 апреля 2020

Я создаю Spring MessageListenerAdapter, который прослушивает Очередь для XML сообщений.

Это моя конфигурация amqp:

    @Bean()
    SimpleMessageListenerContainer simpleMessageListenerContainer(ConnectionFactory connectionFactory,
                                                                  MessageListenerAdapter messageListener) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueueNames("queueA", "queueB");
        container.setMessageListener(messageListener);
        container.setChannelTransacted(true);
        return container;
    }

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

В настоящее время прием сообщений работает, но только если тип моего слушателя возвращается String.

При следующем слушателе я получаю XML сообщения, так что это нормально. Но я не могу получить messageProperties исходного сообщения:

@Component
public class Receiver {

    public void receiveMessage(String message) {
        try {
            if (message.isEmpty()) {
                log.info("---> Received message is empty!");
            } else {
                log.info("---> Received message: <{}>", message);
            }
        } catch (Exception e) {
            log.error("---> Exception in processing receiv                                              
                   ed message!", e);
        }
    }                                                                                                                            
}                                 

Если я изменю тип возврата receiveMessage () на bytes[] или Message , Я получаю следующее сообщение об ошибке:

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Failed to invoke target method 'receiveMessage' with argument type = [class java.lang.String], value = [{myXmlMessage}]

Я уже пробовал MessageConverters, но я новичок ie с RabbitMQ. Спасибо за любую помощь!

1 Ответ

0 голосов
/ 04 мая 2020

Я нашел решение самостоятельно: по умолчанию MessageConverter используется для MessageListenerAdapter. Чтобы предотвратить это, MessageConverter должен быть установлен в null . Теперь это работает, и я получаю сообщение со всеми сообщениями свойства!

@Bean
MessageListenerAdapter messageListener(Receiver receiver) {
    MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiver, "receiveMessage");
    messageListenerAdapter.setMessageConverter(null);
    return messageListenerAdapter;
}
...