构建负载和故障处理的MSMQ代理服务构想
在大并发数据应用处理过程中,往主需要消息队列这样的应用把信息分发到不同服务器上进行数据处理,目的是把流程数据拆分成N个环节分布到不同的服务器上运行,从而提高整体数据处理能力.
前段时间在做MSMQ的负载和故意处理,在测试的过程中发现让我非常困扰的问题,就是通过.net 操作远程MQ的时候当对方挡机了.NET并不会报错,而是会写入本地转出队列这样就很难实时有效地把消息转移到别的MQ服务器.另一方面.NET操作远程MQ本机也必须装上MQ服务,还有一个就是.NET操作远程MQ的损耗也非常高.
为了解决以上问题的,所以打算实现一个MSMQ代理组件,组件分为两大部分别是服务端和CLIENT,服务端的功能主要是开启监听对请求进行本地MQ操作.CLIENT则相对复杂一些它提供的功能有负载各故障迁移等功能.
MSMQNode结构
应用服务和消息处理服务都通过MSMQNode进行消息写入和读取操作.
负载处理
为了适应以后并发的需要,在不调整代码的基础可以轻易配置负载处理能力.
MSMQNode的实现除了具备多机负载处理能力外,组件Client端会简单轮循去操作不同的服务.
故障处理
多节点连接池
MSMQNode在设计上主要是通过软件来实现负载和迁移,所以在部署上并不需要在中间加架设LVS这样的负载服务.为了实现这一功能组件针对性设计一个多节点连接池.
当某个节点出现连接异常的时候,连接池可以把当前损坏的节点从池中排除,除了在排除外连接池也会定期对损坏的节点进行TCP连接创建,一旦检测到连接恢复,那这个节点将重新回归到连接池中.
访问Beetlex的Github