处理器加载就是加载mqtt.json配置项到不同的字典中去。

    处理加载函数:load_handlers

    1. def load_handlers(self, handler_flavor, mandatory_keys, accepted_handlers_list):
    2. if handler_flavor not in self.config:
    3. else:
    4. for handler in self.config.get(handler_flavor):
    5. discard = False
    6. for key in mandatory_keys:
    7. if key not in handler:
    8. discard = True
    9. else:
    10. if discard:
    11. else:
    12. accepted_handlers_list.append(handler)

    去掉日志打印,发现最后只有一行代码处理实际的业务逻辑:accepted_handlers_list.append(handler),就是向函数入参accepted_handlers_list添加handler,handler是mqtt.json配置文件里的配置项,有以下几种handler

    1. __mapping,包括topicFilter和converter

      1. [{'topicFilter': 'sensor/data', 'converter': {'type': 'json', 'deviceNameJsonExpression': '${serialNumber}', 'deviceTypeJsonExpression': '${sensorType}', 'timeout': 60000, 'attributes': [{'type': 'string', 'key': 'model', 'value': '${sensorModel}'}, {'type': 'string', 'key': '${sensorModel}', 'value': 'on'}], 'timeseries': [{'type': 'double', 'key': 'temperature', 'value': '${temp}'}, {'type': 'double', 'key': 'humidity', 'value': '${hum}'}, {'type': 'boolean', 'key': 'occupancy', 'value': '${occ}'}, {'type': 'int', 'key': 'state', 'value': '${state}'}]}}]
    2. __server_side_rpc

      1. [{
      2. "deviceNameFilter": ".*",
      3. "methodFilter": "getState",
      4. "requestTopicExpression": "sensor/${deviceName}/request/${methodName}",
      5. "responseTopicExpression": "sensor/${deviceName}/response/${methodName}",
      6. "responseTimeout": 10000,
      7. "valueExpression": "${params}"
      8. },
      9. {
      10. "deviceNameFilter": ".*",
      11. "methodFilter": "setState",
      12. "requestTopicExpression": "sensor/${deviceName}/request/${methodName}",
      13. "valueExpression": "${params}"
      14. }]
    3. __connect_requests

      1. [{
      2. "topicFilter": "sensor/connect",
      3. "deviceNameJsonExpression": "${serialNumber}"
      4. }]
    4. __disconnect_requests

      1. [{
      2. "topicFilter": "sensor/disconnect",
      3. "deviceNameJsonExpression": "${serialNumber}"
      4. }]
    5. __attribute_requests

    6. __attribute_updates

      1. [{
      2. "deviceNameFilter": ".*",
      3. "attributeFilter": "uploadFrequency",
      4. "topicExpression": "sensor/${serialNumber}/${attributeKey}",
      5. "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
      6. }]