如何使用Spring RabbitMQ MessageListener获取MessageProperties

问题描述 投票:0回答:1

我正在创建一个正在侦听XML消息队列的Spring MessageListenerAdapter。

这是我的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,但是我是RabbitMQ的新手。感谢您的帮助!

java xml spring rabbitmq amqp
1个回答
0
投票

我自己找到了解决方案:默认情况下,MessageConverter用于MessageListenerAdapter。为了防止这种情况,必须将MessageConverter设置为null。现在它可以工作了,我收到包含所有messageProperties的简单消息!

@Bean
MessageListenerAdapter messageListener(Receiver receiver) {
    MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiver, "receiveMessage");
    messageListenerAdapter.setMessageConverter(null);
    return messageListenerAdapter;
}
© www.soinside.com 2019 - 2024. All rights reserved.