ObjectMapper
最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送。如下:
@AutowiredprivateObjectMapperobjectMapper;publicvoidsendOrder(Orderorder){try{StringorderJson=objectMapper.writeValueAsString(order);Messagemessage=MessageBuilder.withBody(orderJson.getBytes()).setContentType(MessageProperties.CONTENT_TYPE_JSON).build();this.rabbitTemplate.convertAndSend(RabbitConfig.QUEUE_ORDERS,message);}catch(JsonProcessingExceptione){e.printStackTrace();}}
发送JSON消息
但是在每一个发送消息的地方都这样写就会很繁琐。如果规定了消息的格式为JSON,可以使用org.springframework.amqp.support.converter.Jackson2JsonMessageConverter作为默认的消息转换器。
在RabbitConfig添加转换器:
@ConfigurationpublicclassRabbitConfig{......@BeanpublicRabbitTemplaterabbitTemplate(finalConnectionFactoryconnectionFactory){finalRabbitTemplaterabbitTemplate=newRabbitTemplate(connectionFactory);rabbitTemplate.setMessageConverter(producerJackson2MessageConverter());returnrabbitTemplate;}@BeanpublicJackson2JsonMessageConverterproducerJackson2MessageConverter(){returnnewJackson2JsonMessageConverter();}}
接收JSON消息
为了接收JSON数据,我们应该通过实现RabbitListenerConfigurer来定制RabbitMQ配置。
@ConfigurationpublicclassRabbitConfigimplementsRabbitListenerConfigurer{......@OverridepublicvoidconfigureRabbitListeners(RabbitListenerEndpointRegistrarregistrar){registrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory());}@BeanMessageHandlerMethodFactorymessageHandlerMethodFactory(){DefaultMessageHandlerMethodFactorymessageHandlerMethodFactory=newDefaultMessageHandlerMethodFactory();messageHandlerMethodFactory.setMessageConverter(consumerJackson2MessageConverter());returnmessageHandlerMethodFactory;}@BeanpublicMappingJackson2MessageConverterconsumerJackson2MessageConverter(){returnnewMappingJackson2MessageConverter();}}