EasyNetQ中使用自定义的ISerializer

时间:2024-03-25 22:37:08

最近在使用EasyNetQ时,遇到一个问题:c++项目组发送的消息数据不是Json数据,而是自定义的数据格式(各字段+‘|’连接成一个字符串),EasyNetQ中消费消息接收的都是强类型,没办法直接消费一个字符串作为一个消息。没办法只好研究EasyNetQ的源码,发现有一个ISerializer接口,只要实现一个自定义的Serializer并注入即可。

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的时候注入序列化器:

var bus = RabbitHutch.CreateBus("host", serviceRegister => serviceRegister.Register<ISerializer, GameLogSerializer>());