You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring整合ActiveMQ监听器反复抛出“Property name cannot be null”异常

Spring整合ActiveMQ遇"Property name cannot be null"无限重复异常

在两次实现Spring整合ActiveMQ的过程中,均遇到同一问题:无论是通过Postman发送HTTP请求,还是直接在ActiveMQ控制台发送消息,都会无限重复抛出异常,核心错误为Property name cannot be null。即使将监听器改为空实现,日志和断点都无法触发,异常依然持续出现。

以下是问题应用代码:

JmsConfig

@Configuration
@EnableJms
public class JmsConfig {

    Logger logger = LoggerFactory.getLogger(JMSErrorHandler.class);
    
    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
            ConnectionFactory connectionFactory,
            DefaultJmsListenerContainerFactoryConfigurer configurer,
            JMSErrorHandler defaultErrorHandler){
        DefaultJmsListenerContainerFactory jmsListenerContainerFactory = new DefaultJmsListenerContainerFactory();
    
        jmsListenerContainerFactory.setConnectionFactory(connectionFactory);
        jmsListenerContainerFactory.setConcurrency("1");
    
        jmsListenerContainerFactory.setErrorHandler(defaultErrorHandler);
        jmsListenerContainerFactory.setMessageConverter(this.jacksonJmsMessageConverter());
    
        configurer.configure(jmsListenerContainerFactory, connectionFactory);
        return jmsListenerContainerFactory;
    
    }
    
    @Service
    public class JMSErrorHandler implements ErrorHandler {
        @Override
        public void handleError(Throwable t) {
            logger.error("Error in listener ", t);
        }
    }
    
    @Bean
    public MessageConverter jacksonJmsMessageConverter() {
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setTargetType(MessageType.TEXT);
        converter.setObjectMapper(new ObjectMapper());
        return converter;
    }
}

PublishController

package com.jackhodge.activemqlearning.controller;

import com.jackhodge.activemqlearning.model.SystemMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PublishController {
    private JmsTemplate jmsTemplate;

    @Autowired
    public PublishController(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    @PostMapping("/publishMessage")
    public ResponseEntity<String> publishMessage(@RequestBody SystemMessage systemMessage){
        try{
            jmsTemplate.convertAndSend("jackhodge-queue", systemMessage.toString());
            return new ResponseEntity<>("I, Jack Hodge, sent your message.", HttpStatus.OK);
        } catch (Exception e){
            return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

SystemMessage

package com.jackhodge.activemqlearning.model;

import lombok.Setter;

@Setter
public class SystemMessage {
    private String source;
    private String message;
    
    public SystemMessage(String source, String message) {
        this.source = source;
        this.message = message;
    }
    
    @Override
    public String toString() {
        return "SystemMessage{" +
                "source='" + source + '\'' +
                ", message='" + message + '\'' +
                '}';
    }
}

MessageConsumer

package com.jackhodge.activemqlearning.consumer.component;

import com.jackhodge.activemqlearning.model.SystemMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer {
    public static final Logger LOGGER = LoggerFactory.getLogger(MessageConsumer.class);
    
    @JmsListener(destination = "jackhodge-queue")
    public void messageListener(SystemMessage systemMessage){
        LOGGER.info("Message Received {}", systemMessage);
    }
}

测试请求示例(两种发送方式均报错):

{     
    "source":"jeff bezo",     
    "message":"hello" 
}

本人对Spring和ActiveMQ较为陌生,已尝试通过断点、日志排查但无果,恳请帮助解决该问题。

内容的提问来源于stack exchange,提问作者Jack Hodge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:24:55