背景:最近在做項目時使用到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);
}
至此完成要求!
參考文章: