自定义Converter
继承AbstractMessageConverter,代码如下:
public class ProtobufMessageConverter extends AbstractMessageConverter {
/**
* object转换为ProtoBuf, 发送消息
*/
@Override
public Message createMessage(Object object, MessageProperties messageProperties) {
System.out.println("发送转换的消息");
PersonTest person = (PersonTest)object;
return new Message(person.toByteArray(), messageProperties);
}
@Override
public Object fromMessage(Message message) throws MessageConversionException {
System.out.println("转换消息");
PersonTest from = null;
try {
from = PersonTest.parseFrom( message.getBody() );
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
return from;
}
}
替换默认Converter
RabbitMQ默认使用的是Java默认的序列化规则,有两种方法替换默认的序列化
1.注册为Bean
将自定义的Converter注册为Bean,一劳永逸。
@Bean
public MessageConverter messageConverter() {
return new ProtobufMessageConverter();
}
2.setMessageConverter
每次发送,接收都要设置
rabbitTemplate.setMessageConverter(new ProtobufMessageConverter());