多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 消息机制 >[success] 我们的所有插件之间的关系都是基于消息机制的,也就是 **MQ消息队列** (Message Queue,简称MQ),插件和系统、小程序之间直接通过MQ直接通讯。通过消息机制,各个插件和组件之间再无隔阂,每个组件不再成为信息孤岛,且MQ机制的高可靠性和窄带通信能力也非常强大,能在网络不佳的情况下保证了消息的传递性。 <br> # 消息规范 >[info] 自美智能物联网系统已经对消息机制进行了整合,用户层只感受到发送一个指令到某个系统组件,实际上消息会发送到控制中心,再由控制中心发送到指定接收者(组件) ![](http://qiniucn.16302.com/a8a130bb162a89fcf3b9a67948f346f5) :-: 用户的感知流程 <br> ![](http://qiniucn.16302.com/851371ef89783f4f5439103dfdb9b2f6) :-: 消息处理的过程 ## 🔥 发送消息 标准的消息发送方法`self.send(MsgType, Receiver, Data)`函数结构为`self.send(数据类型,接收者,发送的数据)` ★ 下面是一段示例代码 ```python from MsgProcess import MsgProcess, MsgType class helloworld(MsgProcess): def Text(self, message): data="你好世界~ 我是智能小美" self.send(MsgType.Text, Receiver='Screen', Data=data) ``` 这段代码的意思是调用`self.send()`函数向接收者(Receiver)`Screen`组件发送`MsgType.Text`类型的数据`你好世界~ 我是智能小美` <br> **参数介绍:** MsgType 消息类型,有以下几种: ``` MsgType.Start # 启动指令 MsgType.Pause # 暂停指令 MsgType.Resume # 继续指令 MsgType.Stop # 停止指令 MsgType.Text # 文本类型 ``` 例1:发送`MsgType.Start`指令到`plugin1`插件(代码:` self.send(MsgType.Start, Receiver='plugin1', Data="")`),则`plugin1`开始运行(线程开始) 例2:发送`MsgType.Pause`指令到`plugin1`插件(代码:` self.send(MsgType.Pause, Receiver='plugin1', Data="")`),则`plugin1`暂停运行(线程暂停) 例3:发送`MsgType.Resume`指令到`plugin1`插件(代码:` self.send(MsgType.Resume, Receiver='plugin1', Data="")`),则`plugin1`继续运行(继续线程) <br> ## 重写消息接收 在自美系统中也可以自定义收到发送者信息的处理方法 ``` # 导入基类库、消息类型库 from MsgProcess import MsgProcess, MsgType class helloworld(MsgProcess): '''你好,世界''' def __init__(self, msgQueue): '''如果在插件或功能模块中使用__ini__方法,必须加下面的这方法,先调用基类中的方法''' super().__init__(msgQueue) def Start(self, message=None): '''功能、插件入口,通常被用初始化插件入口使用''' pass def Text(self, message): '''接收来自其他模块发送过来的消息类型为:MsgType.Text(文本)消息,再进行二次开发和业务逻辑实现''' pass def Pause(self, message=None): '''接收消息类型为:MsgType.Pause(暂停)消息,实现暂停功能''' pass def Resume(self, message=None): '''接收消息类型为:MsgType.Resume(继续)消息,实现继续功能''' pass def Stop(self, message=None): '''接收消息类型为:MsgType.Stop(停止)消息,实现停止功能,定义默认为自动停止''' self.__stop = True ``` 如果在插件或功能模块中使用`__ini__`方法,必须在`__ini__ `方法中加入`super().__init__(msgQueue)`,先调用基类中的方法。