【问题标题】:How to get MessageProperties with Spring RabbitMQ MessageListener如何使用 Spring RabbitMQ MessageListener 获取 MessageProperties
【发布时间】:2020-04-23 14:56:02
【问题描述】:

我正在创建一个 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,但我是 RabbitMQ 的新手。感谢您的帮助!

【问题讨论】:

    标签: java xml spring rabbitmq amqp


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      相关资源
      最近更新 更多