.net基础中间件开发完毕总结

来源:互联网 发布:物理补课软件 编辑:程序博客网 时间:2024/05/29 09:48

从2013年9月份的第一个急迫的线程中间件构思开始,到2016年结束,最后一个OR映射中间件结束,三年中80%的周末和假期时间,花费在中间件的资料查询、设计、编码、打磨之上。

一路下来很辛苦,基本上.net底层或整个类库,不论从广度还是深度,用了个遍。


上图是整个中间的包图,主要包括了几大类,按照历史时间编码顺序和底层顺序分为:

1、线程调度中间件,Trace.Common.ThreadPool

/*
 * 线程池中间件
 * 支持基于自动排队的消息队列、自动排队任务,分内核级异步IO完成端口或内存级锁处理
 * 支持基于阻塞式、缓冲式、并发式的时间定时器
 * 支持可取消任务线程池、自动任务排队线程池
 * 支持带定时器的消息队列
 * author Email:gongbenwen@sina.com
 */

2、日志记录中间件,Trace.Commo.Log

/*
 * 基于异步线程处理的日志记录中间件
 * 支持自定义和可配置日志记录
 * author Email:gongbenwen@sina.com
 */

3、底层通信中间件,Trace.Common.Communication

/*
 * 底层通信统一模型中间件
 * 支持TCP客户端通信、TCP服务端通信、串口通信、UDP通信、Http通信等底层的通信封装
 * 服务端通信,基于配置可采用异步IO模型、完成端口模型等各种通信模型
 * 服务端通信,基于配置,可在不同的处理场景,采用不同的应用线程池,包括并发线程池、串行消息队列、可取消任务的并发线程池等
 * 所有通信采用统一的通信接口输入、输出
 * TCP通信采用传输层IO心跳机制,避免了在应用端独立写心跳检测机制,可适应设备无心跳报文应答场合
 * 所有的输出采用异步通信,与输入隔离,输入根据需求可自启用异步或同步发送
 * author Email:gongbenwen@sina.com
 */

其中,前三组中间件,经历了三次大的重构和无数次小的重构,为第一阶段的中间件,这些中间件中的,线程调度中间件,是所有其他中间件的母中间件,因为涉及到数据处理的地方,必涉及到线程调度。日志中间件,贯穿了这三个中间件意外的所有中间件。底层通信中间件,主要负责了,直接与设备通信,或基于RMI的远程调用,底层的通信。


4、RMI远程调用中间件,其中包括了:Trace.RMI.Client 、Trace.RMI.Server、Trace.RMI.Common、Trace.HttpServer.Host,支持基于Http的远程过程调用,也支持基于TCP的双向远程调用。

/*
 * 客户端远程通信透明代理,支持TCP长连接会话通信、TCP短连接会话通信、HTTP通信
 * 基于文件配置和参数注入,等多种配置方式
 * 支持远程调用,执行过程中异步取消
 * 支持服务端异步调用和服务端事件回调
 * author Email:gongbenwen@sina.com
 */

/*
 * 基于TCP监听的RMI服务端
 * 支持基于IO完成端口的TCP服务和基于可取消任务的线程池管理
 * 支持长连接会话和自动事务启用
 * 支持客户端异步调用和客户端事件回调
 * author Email:gongbenwen@sina.com
 */


5、Winform异步调用,通用绑定界面中间件,Trace.Common.BaseForms,是一个大的UI库,实现了所有UI的数据和绑定基于,异步方式,同时严格遵循MVC视图的调用模型。


6、通用AOP方法拦截中间件,Trace.Common.Dynamic,在做远程通信或事务处理时,需要做一些透明方法拦截和预处理,因此引入了基于IL的Emit输出方式,实现了上述中间件,对开发人员更加友好和通用。

/*
 * 基于IL Emit输出的动态代理中间件
 * 用于方法拦截和动态注入
 * author Email:gongbenwen@sina.com
 */


7、通用事务中间件,Trace.Transaction.Service,依赖拦截注入,自动实现事务范围的环绕,因为采用的是微软操作系统的操作系统事务,不依赖具体的数据库连接组件,数据库连接组件只要实现了微软系统事务即可。


8、数据库访问中间件,Trace.ORM.Service、Trace.ORM.Query支持不同类型的关系数据库,直接的OR映射,契合了基于领域模型的调用方式,当前主要支持SQLServer和Oracle,支持读写分离,其中写连接,根据开关条件,支持同一请求下面向数据库的单一写连接,或同一请求面向表的单一写连接,或短连接方式,支持数据类型与内存对象实体类型的直接数据转化。支持复杂SQL的强类型对象化自动解析和转换。


9、异步客户端任务调度中间件,Trace.Common.ClientTask,主要是面向异步任务调用,支持客户端异步任务自动排队,是消息队列的客户端变体实现。


10、跨进程全局缓存中间,Trace.MemberCache.Client、Trace.MemberCache.Service、Trace.MemberCache.Common

 /*
 * 键值对缓存服务客户端
 * 跨进程和设备,基于管道模式,TCP长连接作为管道连接的缓存处理服务
 * 支持客户端类型自动序列化和反序列化,为减小服务端存储压力,默认启用Protobuf序列化
 * 采用基于客户端请求阻塞方式,采用异步IO和特殊线程池,保证所有执行指令,为无阻塞传输和调用,通过异步事件回调,在客户端实现同步
 * 采用进程级别管道方式,可同时支持,进程内部多个线程的请求,同时发起和等待
 * author Email:gongbenwen@sina.com
 */

/*
 * 键值对缓存服务服务端
 * 跨进程和设备,基于管道模式,TCP长连接作为管道连接的缓存处理服务
 * 支持客户端类型自动序列化和反序列化,为减小服务端存储压力,默认启用Protobuf序列化
 * 采用基于客户端请求阻塞方式,采用异步IO和特殊线程池,保证所有执行指令,为无阻塞传输和调用,通过异步事件回调,在客户端实现同步
 * 采用进程级别管道方式,可同时支持,进程内部多个线程的请求,同时发起和等待
 * author Email:gongbenwen@sina.com
 */

0 0
原创粉丝点击