MQ消息定义v1.0.4.md 5.77 KB

#控制信文内容# ######v1.0.5 by zcx 10/20/2017 2:29:58 PM

1. 文档说明

在平台内部,有许多地方会使用到MQ来作为信息同步的工具。为了规范webS1、IotAdapter、Task等服务在MQ通讯过程中的消息格式,特编写了本文档。webS1可根据该文档中规定的内容衍生与web端交互的接口,需要的字段可自行增加。

2. 正文内容

消息类型分为控制消息、通知消息两大类。MQ通讯时使用Topic Exchange进行数据分发,Routing key的组成规则如下:from.to.dowhat.type。

2.1 控制消息以及对应Routing key

控制消息包含:设备控制、传感器控制、触发器控制、流程控制。

  • 2.1.1 设备控制

    Routing key:webS1.*.ctl
    消息内容:{"toId":目标设备序列号,"action":控制命令,"msgId":消息Id,"time":命令时间戳,"type":device,"recordId":操作记录Id}
    action:
        stop:设备停止
        restart:设备重启
        start:设备启动
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    recordId:操作记录Id
    
  • 2.1.2 传感器控制

    Routing key:webS1.*.ctl.sensor
    消息内容:{"deviceId":"设备序列号","regAddr":"传感器寄存器地址","recordId":"操作记录Id","action":控制命令,"value":写入值,"msgId":消息Id,"time":命令时间戳,"type":sensor}
    deviceId:设备序列号
    regAddr:寄存器地址
    recordId:操作记录Id
    action:
        open:传感器打开
        close:传感器关闭
        write:向传感器写值
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    注意:*同组sensor执行的动作必须一致;
         *value(写入值)只在action==write时有用,其他时候可写任意值
    
  • 2.1.3 触发器控制

    Routing key:webS1.*.ctl
    消息内容:{"toId":触发器Id,"action":控制命令,"msgId":消息Id,"time":命令时间戳,"type":trigger",recordId":操作记录Id}
    action:
        enable:使能开启
        disable:使能关闭
        retry:触发器重试
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    recordId:操作记录Id
    
  • 2.1.4 流程控制

    Routing key:webS1.*.ctl
    消息内容:{"toId":流程Id,"action":控制命令,"msgId":消息Id,"time":命令时间戳,"type":flow,"recordId":操作记录Id}
    action:
        enable:流程使能开启
        disable:流程使能关闭
        pause:流程暂停
        continue:流程继续
        recover:流程恢复
        stop:流程终止
        execute:流程立即执行
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    recordId:操作记录Id
    

2.2 通知消息

通知消息用于在多个服务间进行数据同步和传输,并在一定程度上承担着负载均衡的作用。web端发生编辑事件后,通过MQ告知IotAdapter/Task服务。IotAdapter/Task可以通过push/pull两种方式来获取数据以更新内存表,采取哪种方式取决于消息中包含的事件类型。事件类型与更新内存表的方式对应关系如下:

- (cu)新建/更新事件:pull
- (delete)删除事件:push

push方式:服务通过消息内容更新内存表;
pull方式:服务通过消息获取编辑的关键key,通过调用数据访问服务API的方式来获取真实数据更新内存表;
  • 2.2.1 web端编辑事件

    2.2.1.1 web端设备配置信息编辑

    Routing key:webS1.*.event
    消息内容:{"srcId":设备序列号,"action":事件,"msgId":消息Id,"time":时间戳,"type":"device","oldId":旧的设备序列号}
    action:
        delete:删除
        cu:createOrUpdate新建/更新
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    oldId:当修改设备序列号时,这字段的值为修改前的设备序列号,其他情况为null
    

    2.2.1.2 web端触发器配置信息编辑

    Routing key:webS1.*.event
    消息内容:{"srcId":触发器Id,"action":事件,"msgId":消息Id,"time":时间戳,"type":"trigger"}
    action:
        delete:删除
        create:create新建
        update:更新
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    

    2.2.1.3 web端流程控制配置信息编辑

    Routing key:webS1.*.event
    消息内容:{"srcId":流程Id,"action":事件,"msgId":消息Id,"time":时间戳,"type":"flow"}
    action:
        delete:删除
        create:create新建
        update:更新
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    

    2.2.1.4 web端虚拟tx800设备配置信息编辑

    Routing key:webS1.*.event
    消息内容:{"srcId":虚拟tx800设备ID,"action":事件,"msgId":消息Id,"time":时间戳,"type":"config"}
    action:
        delete:删除
        create:create新建
        update:更新
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    
  • 2.2.2 Task服务向IotAdapter发送传感器控制命令

    Routing key:task.iot.ctl.sensor
    消息内容:{"deviceId":设备序列号,"regAddr":寄存器地址,"recordId":操作记录Id,"action":控制命令,"value":写入值,"msgId":消息Id,"time":命令时间戳,,"type":"sensor"}
    deviceId:设备序列号
    regAddr:寄存器地址
    recordId:操作记录Id
    action:
        open:传感器打开
        close:传感器关闭
        write:向传感器写值
    msgId:该Routing下的消息自然数增加,最大值为Int型最大值,超过最大值后自动复归至1
    time:时间戳
    注意:*value(写入值)只在action==write时有用,其他时候可写任意值
    
  • 2.2.3 Task服务向MQTT服务中心发送告警消息

    ----内容待定----