我尝试在带有Rabbittemplate的队列上发布消息(使用Spring Boot),然后我收到了此消息。我已经尝试搜索解决方案。
Caused by: java.lang.IllegalArgumentException: SimpleMessageConverter only supports String, byte[] and Serializable payloads, received: com.example.demo.SimpleMessage
也许代码的这一部分可以帮助
@Override
public void run(String...strings) throws Exception {
SimpleMessage simpleMessage = new SimpleMessage();
simpleMessage.setName("FirstMessage");
simpleMessage.setDescription("simpleDescription");
rabbitTemplate.convertAndSend("TestExchange", "testRouting", simpleMessage);
}
我感谢任何合作。
问题是您的类SimpleMessage
不实现Serializable
。
RabbitTemplate.convertAndSend
使用SimpleMessageConveter
将您的消息转换为AMQP消息。但是SimpleMessageConverter
要求该消息实现接口Serializable
。
您的SimpleMessage
类应该看起来像:
public class SimpleMessage implements Serializable {
... your code here
}
您可以在此处了解有关可序列化对象的更多信息。
还有另一个解决方案:使用MessageConverter的不同实现而不是默认的SimpleMessageConverter。
例如,jackson2jsonmessageconverter:
public RabbitTemplate jsonRabbitTemplate(ConnectionFactory connectionFactory, ObjectMapper mapper) {
final var jsonRabbitTemplate = new RabbitTemplate(connectionFactory);
jsonRabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter(mapper));
return jsonRabbitTemplate;
}
在我的情况下,更改rabbittemplate的帮助。首先,我有一个:
@Bean
public RabbitTemplate rabbitTemplate() {
return new RabbitTemplate(connectionFactory());
}
然后我将其更改为此:
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(messageConverter);
return rabbitTemplate;
}
@Bean
public MessageConverter messageConverter(ObjectMapper jsonMapper) {
return new Jackson2JsonMessageConverter(jsonMapper);
}