存入rabbitMq时转为string,取回来时转为对应的类
package com.medi.hk.conf;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.support.converter.AbstractMessageConverter;
import org.springframework.amqp.support.converter.MessageConversionException;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class RabbitMqConfig {
private final String mqConvertClassName = "className";
/**
* mq消息转换
* @return
*/
@Bean
public MessageConverter messageConverter() {
return new AbstractMessageConverter() {
/**
* 接收消息时转换
* @param message
* @return
* @throws MessageConversionException
*/
@Override
public Object fromMessage(Message message) throws MessageConversionException {
byte[] body = message.getBody();
MessageProperties messageProperties = message.getMessageProperties();
//需要转为对应类的类名
String className = (String) messageProperties.getHeaders().get(mqConvertClassName);
try {
Boolean aBoolean = (Boolean) messageProperties.getHeaders().get(isArray);
if (aBoolean != null && aBoolean) {
return JSONArray.parseArray(new String(body), Class.forName(className));
} else {
return JSON.parseObject(body, Class.forName(className));
}
} catch (ClassNotFoundException e) {
log.error("mq转换错误: message ==> {} body ==> {}", JSON.toJSONString(message), new String(body), e);
throw new RuntimeException(e);
}
}
/**
* 发送消息时转换
* @param object
* @param messageProperties
* @return
*/
@Override
protected Message createMessage(Object object, MessageProperties messageProperties) {
messageProperties.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
//标记时什么类转换过来的
messageProperties.setHeader(mqConvertClassName, object.getClass().getName());
//如果是数组,则设置数组成员的类型(取第一个,只允许类型相同的数组)
if (object instanceof Collection) {
String className;
Collection coll = (Collection) object;
if (coll.size() > 0) {
Object next = coll.iterator().next();
className = next.getClass().getName();
} else {
className = Object.class.getName();
}
messageProperties.setHeader(mqConvertClassName, className);
messageProperties.setHeader(isArray, true);
} else {
messageProperties.setHeader(mqConvertClassName, object.getClass().getName());
}
return new Message(JSON.toJSONBytes(object), messageProperties);
}
};
}
}
版权声明:本文为qq_34823865原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。