最近在使用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>());