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

db2dz4w8  于 2023-08-05  发布在  RabbitMQ
关注(0)|答案(3)|浏览(191)

我尝试使用RabbitTemplate(使用Sping Boot )在Queue上发布消息,并收到此消息。我已经尝试寻找解决方案。

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);
    }


我欣赏任何合作。

41ik7eoe

41ik7eoe1#

问题是你的类SimpleMessage没有实现Serializable
RabbitTemplate.convertAndSend使用SimpleMessageConveter将您的消息转换为amqp消息。但是SimpleMessageConverter需要该消息来实现接口Serializable
SimpleMessage类应该如下所示:

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

字符串
您可以了解更多关于可序列化对象here的信息。

pdtvr36n

pdtvr36n2#

还有另一个解决方案:使用MessageConverter的不同实现,而不是默认的SimpleMessageConverter。
例如,Jackson2JsonMessageConverter:

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

字符串

r7knjye2

r7knjye23#

在我的情况下,改变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);
}

相关问题