springboot配置rabbitmq的序列化反序列化格式

SpringBoot封装了rabbitmq中,发送对象和接收对象时,会统一将对象和消息互相转换

会用到MessageConverter转换接口

在发送消息时,

会将Object转换成Message Message createMessage(Object object, MessageProperties messageProperties)

接收消息时

SimpleMessageListenerContainer容器监听消息时,会调用SimpleMessageListenerContainer.messageListener的消息转换器将Message转换成对象 Object fromMessage(Message message)

Springboot中,默认的rabbitMq的序列化类是:SimpleMessageConverter

SimpleMessageConverter

将Object对象 和 Message 互相转换的规则

这里存在一个问题

如果发送方: object类是 com.zwh.user

但是接受方没有这个路径的类时,会抛出异常,not found class

所以发送消息时,最好手动将消息转换成String

Jackson2JsonMessageConverter 转换器

这个方式不会出现上面SimpleMessageConverter转换器的 not found class错误

如果项目中要统一的序列化格式, 需要显示声明 转换bean

因为自动配置类RabbitAutoConfiguration 和 RabbitAnnotationDrivenConfiguration

会自动获取Spring 容器中MessageConverter实现类bean数据

并将转换器设置到 RabbitTemplate 和 SimpleRabbitListenerContainerFactory.setMessageConverter() 中

注意:如果 RabbitTemplate 配置的 jackson 序列化,而 listener没有配置(默认SimpleMessageConverter),则接受消息转换成object时将会报错

如下配置

报错为:

ListenerExecutionFailedException: Listener method could not be invoked with the incoming message

Fatal message conversion error; message rejected; it will be dropped or routed to a dead letter exchange

消息转换错误,消息被拒绝

Original: https://www.cnblogs.com/gne-hwz/p/15668947.html
Author: 海绵般汲取
Title: springboot配置rabbitmq的序列化反序列化格式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541152/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球