https://my.oschina.net/liuyuantao/blog/1855531
默認情況下RabbitMQ發送的消息是為字節碼,有時我們需要發送JSON格式的消息,則有如下兩種處理方式。
1.手動轉換成json
最簡單發送JSON數據的方式是把對象使用ObjectMapper等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(); } }
但是在每一個發送消息的地方都這樣寫就會很繁瑣。
2.使用MessageConvert自動轉換為json
如果規定了消息的格式為JSON,並使用消息轉換器,則會自動將消息轉化為json格式而不需要每次手動進行轉換。RabbitTemplate默認使用SimpleMessageConverter作為自己的消息轉化器,而SimpleMessageConverter並不能滿足json消息的需求。我們可以使用Jackson2JsonMessageConverter作為默認的消息轉換器。
為RabbitTemplate配置MessageConverter:
@Configuration public class RabbitConfig { @Bean public RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory) { final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(jsonMessageConverter()); return rabbitTemplate; } @Bean public Jackson2JsonMessageConverter jsonMessageConverter() { return new Jackson2JsonMessageConverter(); } }