RabbitMQ Failed to convert message.No method found for class java.lang.String问题解决

本文档解析了一个Spring AMQP中由于消息类型不匹配导致的异常问题。在问题描述中,消息生产者使用`String`类型发送消息,而消息消费者尝试以`Message`类型接收,从而引发类型转换失败。解决方案是确保生产者和消费者的消息类型一致,例如将生产者发送的消息转换为`byte[]`。更新后的代码示例展示了如何修正此问题,确保生产者发送`byte[]`消息,而消费者相应地处理`byte[]`类型的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

        org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Failed to convert message
        Caused by: org.springframework.amqp.AmqpException: No method found for class java.lang.String

问题分析:

1、消息生产者发送的消息类型为String,消息消费者接收的消息类型为Message,导致接收的时候类型转换不对。

@Component
public class MessageProvider {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(String exchange,String routingKey,String content){
        rabbitTemplate.convertAndSend(exchange,routingKey,content);
    }
}
@Component
@RabbitListener(queues = "directqueue2")
public class MessageReceiver {
    @RabbitHandler
    public void process(Message message) throws InterruptedException {
        Thread.sleep(1000);
    }
}

解决办法:消息生产者发送的消息类型和消息消费者接收的消息类型一致即可。

@Component
public class MessageProvider {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(String exchange,String routingKey,String content){
        rabbitTemplate.convertAndSend(exchange,routingKey,content.getBytes());
    }
}
@Component
@RabbitListener(queues = "directqueue2")
public class MessageReceiver {
    @RabbitHandler
    public void process(byte[] message) throws InterruptedException {
        Thread.sleep(1000);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值