使用 RabbitTemplate 发布消息时出现 java.lang.IllegalArgumentException

el-*_*ico 4 java amqp rabbitmq spring-boot

我尝试使用 RabbitTemplate(使用 Spring Boot)在队列上发布一条消息,我收到了这条消息。我已经尝试寻找解决方案。

Caused by: java.lang.IllegalArgumentException: SimpleMessageConverter only supports String, byte[] and Serializable payloads, received: com.example.demo.SimpleMessage
Run Code Online (Sandbox Code Playgroud)

也许这部分代码可以提供帮助

@Override
    public void run(String...strings) throws Exception {

        SimpleMessage simpleMessage = new SimpleMessage();
        simpleMessage.setName("FirstMessage");
        simpleMessage.setDescription("simpleDescription");

        rabbitTemplate.convertAndSend("TestExchange", "testRouting", simpleMessage);
    }
Run Code Online (Sandbox Code Playgroud)

我感谢任何合作。

Hap*_*ing 16

问题是你的类SimpleMessage没有实现Serializable.

RabbitTemplate.convertAndSend用于SimpleMessageConveter将您的消息转换为 amqp 消息。但是SimpleMessageConverter需要该消息来实现接口Serializable

你的SimpleMessage类应该如下所示:

public class SimpleMessage implements Serializable {
    ... your code here
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处了解有关 Serializable 对象的更多信息。


小智 6

还有另一种解决方案:使用 MessageConverter 的不同实现而不是默认的 SimpleMessageConverter。

例如,Jackson2JsonMessageConverter:

public RabbitTemplate jsonRabbitTemplate(ConnectionFactory connectionFactory, ObjectMapper mapper) {
    final var jsonRabbitTemplate = new RabbitTemplate(connectionFactory);
    jsonRabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter(mapper));
    return jsonRabbitTemplate;
}
Run Code Online (Sandbox Code Playgroud)