消息类型
•Map•String(含json字符串类型)
处理方法
Map消息

如果发送的消息类型是map类型,可以通过SerializationUtils.deserialize方法将消息转换成map类型。
字符串类型(含json格式)
默认情况下RabbitMQ发送的消息是为字节码,有时我们需要发送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();
}
}
但是在每一个发送消息的地方都这样写就会很繁琐。
使用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();
}
}
通过String类的构造函数接收byte[]类型的消息数据,获得jsonStr后可以转换成其它类,然后再进行相关操作。
这里@RabbitListener注解在方法上,如果类中有多个@RabbitListener(queues = TopicRabbitmqConfig.EVENT_MSG_QUEUE_NAME)注解的方法,测试的结果是轮流的调用。
另一种接收方式
注意,这里RabbitListener注解在类上,方法中通过@RabbitHandler注解标识。
控制台
打开 RabbitMQ web 控制台,也可以看到刚才我们在代码里面配置的交换器和队列,以及绑定信息。
查看交换器的详情
查看队列