默認狀況下RabbitMQ發送的消息是轉換爲字節碼,這裏介紹一下如何發送JSON數據。java
ObjectMapperspring
最簡單發送JSON數據的方式是把對象使用ObjectMapper等JSON工具類把對象轉換爲JSON格式,而後發送。以下:json
@Autowired private ObjectMapper objectMapper; public void sendOrder(Order order) { try { String orderJson = objectMapper.writeValueAsString(order); Message message = MessageBuilder .withBody(orderJson.getBytes()) .setContentType(MessageProperties.CONTENT_TYPE_JSON) .build(); this.rabbitTemplate.convertAndSend(RabbitConfig.QUEUE_ORDERS, message); } catch (JsonProcessingException e) { e.printStackTrace(); } }
發送JSON消息app
可是在每個發送消息的地方都這樣寫就會很繁瑣。若是規定了消息的格式爲JSON,能夠使用org.springframework.amqp.support.converter.Jackson2JsonMessageConverter做爲默認的消息轉換器。ide
在RabbitConfig添加轉換器:工具
package com.lyt.rabbit.rabbitproducer; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { @Bean public RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory) { final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(producerJackson2MessageConverter()); return rabbitTemplate; } @Bean public Jackson2JsonMessageConverter producerJackson2MessageConverter() { return new Jackson2JsonMessageConverter(); } }
在RabbitMQ的的管理端查看,轉換後的確實是json,headers裏包含了對象的具體類型等ui
接收JSON消息this
爲了接收JSON數據,咱們應該經過實現RabbitListenerConfigurer來定製RabbitMQ配置。code
package com.lyt.rabbit.rabbitcustomer; import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer; import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.converter.MappingJackson2MessageConverter; import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; import org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory; @Configuration public class RabbitConfig implements RabbitListenerConfigurer { @Override public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) { registrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory()); } @Bean MessageHandlerMethodFactory messageHandlerMethodFactory() { DefaultMessageHandlerMethodFactory messageHandlerMethodFactory = new DefaultMessageHandlerMethodFactory(); messageHandlerMethodFactory.setMessageConverter(consumerJackson2MessageConverter()); return messageHandlerMethodFactory; } @Bean public MappingJackson2MessageConverter consumerJackson2MessageConverter() { return new MappingJackson2MessageConverter(); } }