首页 > 解决方案 > org.springframework.messaging.converter.MessageConversionException:无法从 [org.apache.qpid.jms.message.JmsMessage] 转换为 [java.lang.String]

问题描述

    Reading message from Azure service bus:
    org.springframework.messaging.converter.MessageConversionException: Cannot convert from [org.apache.qpid.jms.message.JmsMessage] to [java.lang.String] for org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener$MessagingMessageConverterAdapter$LazyResolutionMessage@39945b52, failedMessage=org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener$MessagingMessageConverterAdapter$LazyResolutionMessage@39945b52
    
    java code:

导入 org.apache.qpid.jms.message.JmsMessage;

@Component 公共类 AzureserviceBusListner { private final static String QUEUE_NAME = "teste01";

@JmsListener(目的地 = QUEUE_NAME,containerFactory = "jmsListenerContainerFactory")

    public void receive(String msg) {

      System.out.println("Azure received message:::: "+msg);    

   }
}

标签: javaspring-bootqueueazureservicebus

解决方案


您可以发送 JmsTextMessage 而不是 JmsMessage:

        //Autowire a JmsTemplate first, and then

        jmsTemplate.send("<your-destination-name>", new MessageCreator() {
        public Message createMessage(Session session) throws JMSException {
            TextMessagemessage = session.createTextMessage("message payload");

            return message;
        }
    });

我很好奇这里需要发送 JmsMessage 而不是子类?我认为您还可以在发送/接收消息时根据需要使用消息转换器将 JmsMessage 转换为子类。

此外,您是否使用 azure-spring-boot-starter-servicebus-jms 如果是这样,在消息转换器中将 JmsMessage 转换为其他 JAVA 类型将不起作用,因为该库不支持为 JmsListener 自定义消息转换器。


推荐阅读