在发送消息的时候,我们可以通过代码看到RabbitMq默认的是使用SimpleMessageConverter来进行消息转换的
SimpleMessageConverter的源码如下图
源码分析总结:
1.MessageConverter
可以把java
对象转换成Message
对象,也可以把Message
对象转换成java
对象
2.MessageListenerAdapter
内部通过MessageConverter
把Message
转换成java对象,然后找到相应的处理方法,参数为转换成的java对象。
3.SimpleMessageConverter
处理逻辑:
如果content_type
是以text开头,则把消息转换成String
类型
如果content_type的
值是application/x-java-serialized-object
则把消息序列化为java对象,否则,把消息转换成字节数组
MessagingMessageListenerAdapter整个逻辑的核心就在 onMessage 方法中,其中toMessagingMessage就是上面步骤的消息转换,
转换器默认使用的就是SimpleMessageConverter
消息转换完成后,就开始执行invokeHandler方法,这个方法是通过反射来调用监听方法完成消息的接收
handlerMethod 为org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter