【问题标题】:java.lang.IllegalArgumentException when publishing a message with RabbitTemplate使用 RabbitTemplate 发布消息时出现 java.lang.IllegalArgumentException
【发布时间】:2019-03-15 19:53:35
【问题描述】:

我尝试使用 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);
    }

感谢任何合作。

【问题讨论】:

  • 某个地方正在调用SimpleMessageConverter.createMessage。我不记得 convertAndSend 是否为你调用了。
  • 查看 spring 的源代码,convertAndSend,调用 MessageConverter.toMessage,后者调用 MessageConverter.createMessage,因为这是 SimpleMessage 的一个实例,所以我们得到 SimpleMessageConverter.createMessage
  • 同意迪伦在下面提到的。您需要将您的对象设为可序列化。在此处查看与您的用例类似的发送消息的一些示例。 thepracticaldeveloper.com/2016/10/23/…

标签: java spring-boot rabbitmq amqp


【解决方案1】:

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

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

您的 SimpleMessage 类应如下所示:

public class SimpleMessage implements Serializable {
    ... your code here
}

您可以了解有关可序列化对象here 的更多信息。

【讨论】:

    【解决方案2】:

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

    例如Jackson2JsonMessageConverter:

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

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2016-08-22
      • 1970-01-01
      • 2023-03-16
      • 2012-09-03
      相关资源
      最近更新 更多