最近在使用EasyNetQ时,遇到一个问题:c++项目组发送的消息数据不是Json数据,而是自定义的数据格式(各字段+‘|’链接成一个字符串),EasyNetQ中消费消息接收的都是强类型,没办法直接消费一个字符串做为一个消息。没办法只好研究EasyNetQ的源码,发现有一个ISerializer接口,只要实现一个自定义的Serializer并注入便可。c++
public class GameLogSerializer : ISerializer { public T BytesToMessage<T>(byte[] bytes) { //实现自定义的反序列化代码 } public object BytesToMessage(Type type, byte[] bytes) { //实现自定义的反序列化代码 } public byte[] MessageToBytes<T>(T message) where T : class { //实现自定义的序列化代码 } }
使用Bus的时候注入序列化器:spa
var bus = RabbitHutch.CreateBus("host", serviceRegister => serviceRegister.Register<ISerializer, GameLogSerializer>());