MSMQ格式化(序列化和反序列化) Formatter<TEntity> : IMessageFormatter, ICloneable { Formatter() { Capacity = 1024; } #region 配置 Capacity { get; set; } 序列化工具 ISerialize<TEntity, Stream> Serializer { get; set; } 反序列化工具 IDeserialize<Stream, TEntity> Deserializer { get; set; } #endregion #region IMessageFormatter CanRead(Message message) { return message.BodyStream != null && message.BodyStream.Length > 0; } Read(Message message) { if (message == null) return null; IDeserialize<Stream, TEntity> instance = Deserializer ?? GlobalServices.Instance.CreateDeserializer<Stream, TEntity>(); TEntity entity = default(TEntity); try { Transform.TryDeserialize<Stream, TEntity>(instance, message.BodyStream, ref entity); } catch { } return entity; } Write(Message message, object obj) { TEntity entity = default(TEntity); if (!Transform.TryConvert<object, TEntity>(obj, ref entity)) return; Stream stream = new System.IO.MemoryStream(Capacity); ISerialize<TEntity, Stream> instance = Serializer ?? GlobalServices.Instance.CreateSerializer<TEntity, Stream>(); try { Transform.TrySerialize<TEntity, Stream>(instance, entity, ref stream); } catch { } message.BodyStream = stream; } #region ICloneable Clone() { return this; } #endregion #endregion }
MSMQ格式化
消息队列这个组件我开发测试了比较长的时间,也是项目开发关键。以后还要整合为框架的基础服务,这样用起来就更加方便和简单。
分布式消息队列一直都是高大上的东西,很多分布式架构都是以分布式消息队列为基石来构架。
我有一句话经常说,”好钢要用在刀刃上,好东西不能滥用“。分布式消息队列也是,我们用分布式任务解决计算密集型问题还是资源密集型问题。如果都不是,可不可以尝试更多的内存(进程内)消息队列,说不定惊喜多多啊。
我也力争让分布式消息队列和内存(进程内)消息队列编码上几乎没有区别,这样”两种“消息队列就可以很方便的切换。
网上有很多优秀开源消息队列,用法各异,我打算封装为一致的api(只是配置不一样),来把消息队列发扬广大。