摘要:分析了应用于电气监控系统的消息总线应具有可靠性、实时性、选择性等特性,针对这些特性,设计了一种基于消息路由的紧凑型快速消息总线,及其实现方案。最后验证了该方案满足电气监控系统的需求。
关键词:电气监控系统;消息总线;多生产者;多消费者;消息路由
引言
电气监控系统以计算机、通讯设备、测控单元为基本工具,采集实时数据、检测开关状态及对其远程控制。电气监控系统作为分布式系统,其中存在大量的一对多、多对多通信需求,电气状态数据和控制命令等消息的传递具有可靠性、实时性、选择性等特性,需要采用基于路由的紧凑型快速消息总线。
1.紧凑型快速消息总线的概念
1.1 消息总线的概念
消息总线(Message Queue,MQ),是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖消息总线,逻辑上和物理上都不用依赖其他服务,是实现高性能、高可用、可伸缩和最终一致性架构中不可以或缺的一环。
1.2 对可靠性的要求
电气监控系统对可靠性要求很高,特别是高压设备和机组设备,误操作会给发电企业造成损失。因此,消息总线必须充分考虑可靠性。
1.3 对实时性的要求
电气监控系统中的自动电压调节模块,如果电压信号反馈延时过大,则会造成电压过调的后果。因此,消息总线必须具备实时性。
1.4 对选择性的要求
电气监控系统是由不同功能模块组成的系统,不同的模块关注不同的部分,另外,满足选择性还可以减少传递的消息数量,减小系统开销。因此,消息总线必须满足选择性的要求。
2.紧凑型快速消息总线的设计
2.1 整体框架设计
本文设计的消息总线基于消息路由功能,实现了一个多生产者(Producer)多消费者(Consumer)的总线模型。整体框架如图1所示。
图1 紧凑型快速消息总线模型
图2 Producer业务
消息总线与其它进程间通过socket进行通信。其它进程在启动时,首先在消息总线上注册自己的身份,如果是消息发布程序,消息总线生成一个Producer线程;如果是消息接收程序,消息总线则生成一个Consumer线程,并根据消息接收程序提供的关注列表,把相应的Producer对象添加的自己的关注列表中,同时在此Producer对象的Consumer列表中把自己添加进去。
2.2 Producer设计
对于Producer业务流程如图2所示。
2.3 Consumer设计
对于Consumer业务流程如图2所示。
图3 Consumer业务
3.紧凑型快速消息总线的实现
3.1 代码实现
节点模型:
struct Node
{
enum Status{
CanWrite = 0x00, //写允许
CanRead = 0x01, //读允许
IsWriting = 0x02, //正在写
IsReading = 0x04 //正在读
};
quint32 consumersMark; //需要读取此消息的consumers标志
quint8 nodeStatus; //此节点的状态
char nodeContent[1024]; //消息内容
};
Producer模型:
class Producer
{
private:
QString mName; //此Producer的名字
QList<Consumer *> mConsumers; //关注此Producer的Consumer列表
Ring *mpRing; //此Producer关联的环形数组指针
};
Consumer模型:
class Consumer
{
private:
QString mName; //此Consumer的名字
QList<Producer *> mProducers; //关注的Producer列表
Ring *mpRing; //此Consumer关联的环形数组指针
};
3.2 性能测试
测试采用极限测试方式,得出本消息总线的最佳性能。
情况1:单Producer单Consumer。测试了5组数据,结果见图4。
图5 多Producer多Consumer
3.3 小结
在共计10组的测试中,最高7.38E-07的丢失率足够低,基本可以忽略,符合可靠性的要求。另外观察到最低的平均速度是1347.92条每秒,可以看出消息的转发过程在毫秒级别,符合实时性的要求。通过多Producer对多Consumer的测试,也表明本总线符合选择性的要求。
4.结束语
测试表明,本文设计的消息总线完全满足电气监控系统对可靠性、实时性和选择性的要求,电气监控系统应用本消息总线后,可以很方便的实现发送消息,接收消息等操作,由于紧凑型设计,在本总线的运行过程中,占用系统资源较低,这一特性也让采用本总线的电气监控系统非常适用于旧系统的改造。
参考文献
[1]万豪,史浩山,林卓,等.基于订阅发布机制的中间件系统设计与实现.计算机测量与控制,2012.20(9):2551-2554.
[2]王攀,沈苏彬.消息总线——基于组件的系统通信和集成架构.南京邮电学院院报,2003年9月,第23卷,第3期:34-39.
[3]徐晶,许炜.消息中间件综述.计算机工程,2005年8月,第31卷,第16期:73-76.
论文作者:王辉
论文发表刊物:《电力设备》2019年第15期
论文发表时间:2019/12/9
标签:消息论文; 总线论文; 监控系统论文; 电气论文; 选择性论文; 紧凑型论文; 实时论文; 《电力设备》2019年第15期论文;