RabbitMQ系列-发送json格式消息
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(); } }
不积跬步,无以至千里。不积小流,无以成江海!