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

Spring JMS集成RabbitMQ控制台手动发消息报invalid stream header错误如何解决

问题原因

报错是因为rabbitmq-jms默认会把消息体当做Java序列化后的字节流解析,你在RabbitMQ控制台手动发送的是普通文本,没有Java序列化的固定流头,所以触发StreamCorruptedException异常。

方案1:不修改代码,仅在RabbitMQ控制台发布消息时添加指定头

你在控制台发布消息的「Headers」区域新增以下两个属性即可:

  • content_type:值填text/plain
  • type:值填TextMessage
    消息体直接填写普通字符串即可被正常消费。

方案2:修改JMS配置,默认使用字符串消息转换器,兼容所有文本消息

该方案不需要每次在控制台手动加头,应用本身的消息收发逻辑也不受影响,修改配置类如下:

@EnableJms
@Configuration
public class ConnectionRabbitConfig {

    @Autowired 
    RabbitProperties rabbitProperties;

    @Bean
    public ConnectionFactory jmsConnectionFactory() {
        RMQConnectionFactory connectionFactory = new RMQConnectionFactory();
        connectionFactory.setUsername(rabbitProperties.getUser());
        connectionFactory.setPassword(rabbitProperties.getPass());
        connectionFactory.setVirtualHost(rabbitProperties.getVirtualhost());
        connectionFactory.setHost(rabbitProperties.getHost());
        connectionFactory.setPort(rabbitProperties.getPort());
        return connectionFactory;
    }

    // 配置字符串消息转换器
    @Bean
    public MessageConverter stringMessageConverter() {
        return new StringMessageConverter();
    }

    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(@Autowired ConnectionFactory connectionFactory, @Autowired MessageConverter messageConverter) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setAutoStartup(rabbitProperties.getListenerEnabled());
        // 给监听容器注入消息转换器
        factory.setMessageConverter(messageConverter);
        return factory;
    }

    @Bean
    public JmsTemplate defaultJmsTemplate(@Autowired ConnectionFactory connectionFactory, @Autowired MessageConverter messageConverter) {
        JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        // 给发送模板注入消息转换器,保证应用内发送的消息格式统一
        jmsTemplate.setMessageConverter(messageConverter);
        return jmsTemplate;
    }
}

修改完成后,不管是应用自身发送的消息,还是控制台手动发送的普通文本消息都可以正常消费。

内容的提问来源于stack exchange,提问作者Dilermando Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:06