java.lang.IllegalArgumentException 使用 RabbitTemplate 发布消息时
java.lang.IllegalArgumentException when publishing a message with RabbitTemplate
我尝试使用 RabbitTemplate(使用 Spring 引导)在队列上发布一条消息,我收到了这条消息。我已经尝试寻找解决方案。
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);
}
感谢任何合作。
问题是你的 class SimpleMessage
没有实现 Serializable
.
RabbitTemplate.convertAndSend
使用 SimpleMessageConveter
将您的消息转换为 amqp 消息。但是 SimpleMessageConverter
要求该消息实现接口 Serializable
.
您的 SimpleMessage
class 应该如下所示:
public class SimpleMessage implements Serializable {
... your code here
}
您可以了解有关可序列化对象的更多信息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(使用 Spring 引导)在队列上发布一条消息,我收到了这条消息。我已经尝试寻找解决方案。
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);
}
感谢任何合作。
问题是你的 class SimpleMessage
没有实现 Serializable
.
RabbitTemplate.convertAndSend
使用 SimpleMessageConveter
将您的消息转换为 amqp 消息。但是 SimpleMessageConverter
要求该消息实现接口 Serializable
.
您的 SimpleMessage
class 应该如下所示:
public class SimpleMessage implements Serializable {
... your code here
}
您可以了解有关可序列化对象的更多信息here。
还有另一种解决方案:使用 MessageConverter 的不同实现而不是默认的 SimpleMessageConverter。
例如,Jackson2JsonMessageConverter:
public RabbitTemplate jsonRabbitTemplate(ConnectionFactory connectionFactory, ObjectMapper mapper) {
final var jsonRabbitTemplate = new RabbitTemplate(connectionFactory);
jsonRabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter(mapper));
return jsonRabbitTemplate;
}