背景:最近在做项目时使用到rabbitMq,并且要适配外部的系统,我们内部系统MQ所用的消息格式一直是默认格式。但是和对方对接的时候不符合要求,需改动。
默认如下:
content-type:text/plain
要求如下:
content-type:application/json
解决方法如下(针对消息的生产者):
在MessagePostProcessor中给message的头做自定义处理(这个功能类似于spring的BeanPostProcessor)对消息的扩展处理,个人认为rabbitMq应该是参考spring的实现方法去实现的。
private final static MessagePostProcessor messagePostProcessor = message -> {
message.getMessageProperties().setContentType("application/json");
message.getMessageProperties().setContentEncoding("UTF-8");
return message;
};
然后在发送消息给消费者时候带上自己的自定义的消息头:
public static void sendMessageByJson(String exchangeName, String routingkey, Object msg){
amqpTemplate.convertAndSend(exchangeName, routingkey, msg, messagePostProcessor);
}
至此完成要求!
参考文章: