华为云用户手册

  • 示例 终端设备绑定到边缘节点时可收到如下消息。 $hw/events/node/{node_id}/membership/updated { "event_id":"04a975ab-fd51-49be-85f5-5967e994f640", "timestamp":1557314742136, "added_devices":[ { "id":"ab39361a-6fc0-4c94-b919-72b1e08ca690", "name":"IEF-device", "state":"unknown", "attributes":{ "address":{ "value":"shenzhen", "optional":true, "metadata":{ "type":"string" } } }, "twin":{ "state":{ "expected":{ "value":"running", "metadata":{ "timestamp":1557314434570 } }, "optional":true, "metadata":{ "type":"string" } } } } ], "removed_devices":null }
  • 示例 终端设备绑定到边缘节点时可收到如下消息。 $hw/events/node/{node_id}/membership/updated { "event_id":"04a975ab-fd51-49be-85f5-5967e994f640", "timestamp":1557314742136, "added_devices":[ { "id":"ab39361a-6fc0-4c94-b919-72b1e08ca690", "name":"IEF-device", "state":"unknown", "attributes":{ "address":{ "value":"xxx", "optional":true, "metadata":{ "type":"string" } } }, "twin":{ "state":{ "expected":{ "value":"running", "metadata":{ "timestamp":1557314434570 } }, "optional":true, "metadata":{ "type":"string" } } } } ], "removed_devices":null }
  • 示例 终端设备绑定到边缘节点时可收到如下消息。 $hw/events/device/{device_id}/twin/update/delta { "event_id":"b9625811-f34f-4252-bee9-98185e7e1ec7", "timestamp":1557314742131, "twin":{ "state":{ "expected":{ "value":"running", "metadata":{ "timestamp":1557314742122 } }, "optional":true, "metadata":{ "type":"string" } } }, "delta":{ "state":"running" } }
  • 参数说明 参数 类型 说明 event_id String 事件ID timestamp Int64 事件发生事件戳 twin Object 设备孪生变更信息集合,每个孪生以key/value形式存在。value中包含是否可选、孪生metadata包含类型信息、孪生期望状态包含期望值和更新时间、孪生真实状态包含真实值和更新时间等。 delta Map 包含设备孪生期望值与真实值不同的孪生名称和期望值。
  • 参数说明 参数 类型 说明 event_id String 事件ID timestamp Int64 事件发生事件戳 twin Object 设备孪生变更信息集合,每个孪生以key/value形式存在。value中包含是否可选、孪生metadata包含类型信息、孪生期望状态包含期望值和更新时间、孪生真实状态包含真实值和更新时间等。 delta Map 包含设备孪生期望值与真实值不同的孪生名称和期望值。
  • 示例 终端设备绑定到边缘节点时可收到如下消息。 $hw/events/device/{device_id}/twin/update/delta { "event_id":"b9625811-f34f-4252-bee9-98185e7e1ec7", "timestamp":1557314742131, "twin":{ "state":{ "expected":{ "value":"running", "metadata":{ "timestamp":1557314742122 } }, "optional":true, "metadata":{ "type":"string" } } }, "delta":{ "state":"running" } }
  • 示例 终端设备绑定到边缘节点时可收到如下消息。 $hw/events/device/{device_id}/twin/update/document { "event_id":"", "timestamp":1557314742122, "twin":{ "state":{ "last":null, "current":{ "expected":{ "value":"running", "metadata":{ "timestamp":1557314742122 } }, "optional":true, "metadata":{ "type":"string" } } } } }
  • 示例 终端设备绑定到边缘节点时可收到如下消息。 $hw/events/device/{device_id}/twin/update/document { "event_id":"", "timestamp":1557314742122, "twin":{ "state":{ "last":null, "current":{ "expected":{ "value":"running", "metadata":{ "timestamp":1557314742122 } }, "optional":true, "metadata":{ "type":"string" } } } } }
  • 终端设备上报实际状态到云端 终端设备上报实际状态到云端的过程如图2所示。 图2 设备上报状态 终端设备将实际状态(Actual State)实时上报给MQTT broker。 EventBus从MQTT broker收到订阅消息,消息内容包含终端设备的实际状态。 EventBus把终端设备实际状态发送给DeviceTwin,DeviceTwin在边缘节点存储终端设备实际状态。 DeviceTwin同步实际状态给WebSocket客户端EdgeHub。 EdgeHub发送消息给IEF。
  • 云端修改孪生属性控制终端设备状态 图3 修改终端设备状态 在IEF中修改终端设备的孪生属性,IEF将终端设备期望状态(Expected State)发送给边缘节点的EdgeHub。 EdgeHub发送终端设备期望状态消息到DeviceTwin,DeviceTwin在边缘节点存储终端设备期望状态。 终端设备实时发消息给MQTT broker查询终端设备期望状态。 EventBus接收到从MQTT broker发过来的消息。 EventBus根据消息去查询终端设备期望状态。 DeviceTwin反馈当前终端设备期望状态给EventBus。 EventBus发送设终端备期望状态的结果给MQTT broker。 终端设备从MQTT broker收到订阅消息,根据期望状态调整实际状态。
  • 云端修改孪生属性控制终端设备状态 图3 修改终端设备状态 在IEF中修改终端设备的孪生属性,IEF将终端设备期望状态(Expected State)发送给边缘节点的EdgeHub。 EdgeHub发送终端设备期望状态消息到DeviceTwin,DeviceTwin在边缘节点存储终端设备期望状态。 终端设备实时发消息给MQTT broker查询终端设备期望状态。 EventBus接收到从MQTT broker发过来的消息。 EventBus根据消息去查询终端设备期望状态。 DeviceTwin反馈当前终端设备期望状态给EventBus。 EventBus发送设终端备期望状态的结果给MQTT broker。 终端设备从MQTT broker收到订阅消息,根据期望状态调整实际状态。
  • 终端设备上报实际状态到云端 终端设备上报实际状态到云端的过程如图2所示。 图2 设备上报状态 终端设备将实际状态(Actual State)实时上报给MQTT broker。 EventBus从MQTT broker收到订阅消息,消息内容包含终端设备的实际状态。 EventBus把终端设备实际状态发送给DeviceTwin,DeviceTwin在边缘节点存储终端设备实际状态。 DeviceTwin同步实际状态给WebSocket客户端EdgeHub。 EdgeHub发送消息给IEF。
  • Go语言代码样例 package main import ( "crypto/tls" "crypto/x509" "fmt" "math/rand" "sync" "time" MQTT "github.com/eclipse/paho.mqtt.golang" ) func main() { subClient := InitMqttClient(onSubConnectionLost) pubClient := InitMqttClient(onPubConnectionLost) wait := sync.WaitGroup{} wait.Add(1) go func() { for { time.Sleep(1*time.Second) pubClient.Publish("topic", 0, false, "hello world") } }() subClient.Subscribe("topic", 0, onReceived) wait.Wait() } func InitMqttClient(onConnectionLost MQTT.ConnectionLostHandler) MQTT.Client { pool := x509.NewCertPool() cert, err := tls.LoadX509KeyPair("/tmp/example_cert.crt", "/tmp/example_cert.key") if err != nil { panic(err) } tlsConfig := &tls.Config{ RootCAs: pool, Certificates: []tls.Certificate{cert}, // 单向认证,client不校验服务端证书 InsecureSkipVerify: true, } // 使用tls或者ssl协议,连接8883端口 opts := MQTT.NewClientOptions().AddBroker("tls://127.0.0.1:8883").SetClientID(fmt.Sprintf("%f",rand.Float64())) opts.SetTLSConfig(tlsConfig) opts.OnConnect = onConnect opts.AutoReconnect = false // 回调函数,客户端与服务端断连后立刻被触发 opts.OnConnectionLost = onConnectionLost client := MQTT.NewClient(opts) loopConnect(client) return client } func onReceived(client MQTT.Client, message MQTT.Message) { fmt.Printf("Receive topic: %s, payload: %s \n", message.Topic(), string(message.Payload())) } // sub客户端与服务端断连后,触发重连机制 func onSubConnectionLost(client MQTT.Client, err error) { fmt.Println("on sub connect lost, try to reconnect") loopConnect(client) client.Subscribe("topic", 0, onReceived) } // pub客户端与服务端断连后,触发重连机制 func onPubConnectionLost(client MQTT.Client, err error) { fmt.Println("on pub connect lost, try to reconnect") loopConnect(client) } func onConnect(client MQTT.Client) { fmt.Println("on connect") } func loopConnect(client MQTT.Client) { for { token := client.Connect() if rs, err := CheckClientToken(token); !rs { fmt.Printf("connect error: %s\n", err.Error()) } else { break } time.Sleep(1 * time.Second) } } func CheckClientToken(token MQTT.Token) (bool, error) { if token.Wait() && token.Error() != nil { return false, token.Error() } return true, nil }
  • 使用证书 证书用于终端设备与MQTT broker通信时鉴权。 下面是Go语言代码样例和Java语言代码样例,演示了如何使用证书做鉴权。 客户端不需要校验服务端证书,单向认证即可。 内置MQTT broker默认开启8883端口。 样例中的Go语言MQTT Client引用了github.com/eclipse/paho.mqtt.golang开源库。 客户端需要处理断连事件,实现掉线重连机制,提高连接可靠性。
  • 操作场景 内置MQTT broker默认开启端口进行TLS(Transport Layer Security)安全认证,客户端必须带上证书才能访问MQTT broker。 终端设备和应用可以通过在对应节点详情页创建的证书进行安全认证。 在节点组中部署的应用可能调度到节点组内任意节点,终端设备可能访问节点组内任意节点,从边缘节点处创建的证书不能满足应用访问节点MQTT broker的需要,所以需要使用节点组证书。节点组证书创建方法请参见节点组证书。
  • 约束与限制 证书与边缘节点绑定,在一个边缘节点下申请的证书只能用来访问该边缘节点的MQTT broker,如果访问其他边缘节点的MQTT broker,会导致认证失败。 一个边缘节点最多只能申请10份证书。 证书的有效期为5年。 MQTT使用限制 表1 MQTT使用限制 描述 限制 支持的MQTT协议版本 3.1.1 与标准MQTT协议的区别 支持QoS 0 支持Topic自定义 不支持QoS 1和QoS 2 不支持will、retain msg MQ TTS 支持的安全等级 采用TCP通道基础 + TLS协议(TLSV1.2 版本)
  • 使用证书 证书用于终端设备与MQTT broker通信时鉴权。 下面是Go语言代码样例和Java语言代码样例,演示了如何使用证书做鉴权。 客户端不需要校验服务端证书,单向认证即可。 内置MQTT broker默认开启8883端口。 样例中的Go语言MQTT Client引用了github.com/eclipse/paho.mqtt.golang开源库。 客户端需要处理断连事件,实现掉线重连机制,提高连接可靠性。
  • Go语言代码样例 package main import ( "crypto/tls" "crypto/x509" "fmt" "math/rand" "sync" "time" MQTT "github.com/eclipse/paho.mqtt.golang" ) func main() { subClient := InitMqttClient(onSubConnectionLost) pubClient := InitMqttClient(onPubConnectionLost) wait := sync.WaitGroup{} wait.Add(1) go func() { for { time.Sleep(1*time.Second) pubClient.Publish("topic", 0, false, "hello world") } }() subClient.Subscribe("topic", 0, onReceived) wait.Wait() } func InitMqttClient(onConnectionLost MQTT.ConnectionLostHandler) MQTT.Client { pool := x509.NewCertPool() cert, err := tls.LoadX509KeyPair("/tmp/example_cert.crt", "/tmp/example_cert.key") if err != nil { panic(err) } tlsConfig := &tls.Config{ RootCAs: pool, Certificates: []tls.Certificate{cert}, // 单向认证,client不校验服务端证书 InsecureSkipVerify: true, } // 使用tls或者ssl协议,连接8883端口 opts := MQTT.NewClientOptions().AddBroker("tls://127.0.0.1:8883").SetClientID(fmt.Sprintf("%f",rand.Float64())) opts.SetTLSConfig(tlsConfig) opts.OnConnect = onConnect opts.AutoReconnect = false // 回调函数,客户端与服务端断连后立刻被触发 opts.OnConnectionLost = onConnectionLost client := MQTT.NewClient(opts) loopConnect(client) return client } func onReceived(client MQTT.Client, message MQTT.Message) { fmt.Printf("Receive topic: %s, payload: %s \n", message.Topic(), string(message.Payload())) } // sub客户端与服务端断连后,触发重连机制 func onSubConnectionLost(client MQTT.Client, err error) { fmt.Println("on sub connect lost, try to reconnect") loopConnect(client) client.Subscribe("topic", 0, onReceived) } // pub客户端与服务端断连后,触发重连机制 func onPubConnectionLost(client MQTT.Client, err error) { fmt.Println("on pub connect lost, try to reconnect") loopConnect(client) } func onConnect(client MQTT.Client) { fmt.Println("on connect") } func loopConnect(client MQTT.Client) { for { token := client.Connect() if rs, err := CheckClientToken(token); !rs { fmt.Printf("connect error: %s\n", err.Error()) } else { break } time.Sleep(1 * time.Second) } } func CheckClientToken(token MQTT.Token) (bool, error) { if token.Wait() && token.Error() != nil { return false, token.Error() } return true, nil }
  • 约束与限制 证书与边缘节点绑定,在一个边缘节点下申请的证书只能用来访问该边缘节点的MQTT broker,如果访问其他边缘节点的MQTT broker,会导致认证失败。 一个边缘节点最多只能申请10份证书。 证书的有效期为5年。 MQTT使用限制 表1 MQTT使用限制 描述 限制 支持的MQTT协议版本 3.1.1 与标准MQTT协议的区别 支持QoS 0 支持Topic自定义 不支持QoS 1和QoS 2 不支持will、retain msg MQTTS支持的安全等级 采用TCP通道基础 + TLS协议(TLSV1.2 版本)
  • 设备孪生(DeviceTwin) 终端设备通常包含两类数据: 一是不会改变的元数据,包括序列号、资产标识符、Mac地址等描述设备信息的数据。这种数据也可以称为终端设备的静态属性或设备属性。 另一类是终端设备的动态数据,包括特定背景下的终端设备专有实时数据,例如灯的开、关状态。这种数据也可以称为终端设备的孪生属性。 设备孪生具有与物理设备相同的特性,便于终端设备与应用之间进行更好地通信。应用发送的命令首先到达设备孪生,设备孪生根据应用设置的Expected State(期望的状态)进行状态更新,此外终端设备实时反馈自身的Actual State(真实的状态),设备孪生同时记录终端设备的Actual State和Expected State 。这种方式也使终端设备在离线状况下再次上线时,终端设备的状态也能得到同步。 图2 DeviceTwin 在IEF中可以创建终端设备,并能将终端设备与边缘节点关联,关联后会在边缘节点上保存被关联设备的属性和孪生信息。边缘节点上的应用程序可在边缘节点获取终端设备属性、设备孪生信息、以及修改终端设备孪生期望值和真实值。同时IEF负责同步云、边的孪生信息,当有冲突时,将以边缘侧的修改为主。 详细的终端设备状态边云协同机制请参见设备孪生工作原理。
  • 设备孪生(DeviceTwin) 终端设备通常包含两类数据: 一是不会改变的元数据,包括序列号、资产标识符、Mac地址等描述设备信息的数据。这种数据也可以称为终端设备的静态属性或设备属性。 另一类是终端设备的动态数据,包括特定背景下的终端设备专有实时数据,例如灯的开、关状态。这种数据也可以称为终端设备的孪生属性。 设备孪生具有与物理设备相同的特性,便于终端设备与应用之间进行更好地通信。应用发送的命令首先到达设备孪生,设备孪生根据应用设置的Expected State(期望的状态)进行状态更新,此外终端设备实时反馈自身的Actual State(真实的状态),设备孪生同时记录终端设备的Actual State和Expected State 。这种方式也使终端设备在离线状况下再次上线时,终端设备的状态也能得到同步。 图2 DeviceTwin 在IEF中可以创建终端设备,并能将终端设备与边缘节点关联,关联后会在边缘节点上保存被关联设备的属性和孪生信息。边缘节点上的应用程序可在边缘节点获取终端设备属性、设备孪生信息、以及修改终端设备孪生期望值和真实值。同时IEF负责同步云、边的孪生信息,当有冲突时,将以边缘侧的修改为主。 详细的终端设备状态边云协同机制请参见设备孪生工作原理。
  • 操作步骤 安装GPU驱动。 下载GPU驱动,推荐驱动链接: https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/tesla/440.33.01/NVIDIA-Linux-x86_64-440.33.01.run&lang=us&type=Tesla 执行如下安装驱动命令。 bash NVIDIA-Linux-x86_64-440.33.01.run 执行如下命令检查GPU驱动安装状态。 nvidia-smi 以root用户登录边缘节点。 执行如下命令。 nvidia-modprobe -c0 -u 创建文件夹。 mkdir -p /var/IEF/nvidia/drivers /var/IEF/nvidia/bin /var/IEF/nvidia/lib64 拷贝驱动文件。 对于CentOS,依次执行如下命令拷贝驱动文件: cp /lib/modules/{当前环境内核版本号}/kernel/drivers/video/nvi* /var/IEF/nvidia/drivers/ cp /usr/bin/nvidia-* /var/IEF/nvidia/bin/ cp -rd /usr/lib64/libcuda* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libEG* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libGL* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libnv* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libOpen* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libvdpau_nvidia* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/vdpau /var/IEF/nvidia/lib64/ 对于Ubuntu,依次执行如下命令拷贝驱动文件: cp /lib/modules/{当前环境内核版本号}/kernel/drivers/video/nvi* /var/IEF/nvidia/drivers/ cp /usr/bin/nvidia-* /var/IEF/nvidia/bin/ cp -rd /usr/lib/x86_64-linux-gnu/libcuda* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libEG* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libGL* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libnv* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libOpen* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libvdpau_nvidia* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/vdpau /var/IEF/nvidia/lib64/ 其中,当前环境内核版本号可以使用uname -r命令查看获取,如下所示,请替换为实际取值。 # uname -r 3.10.0-514.e17.x86_64 执行以下命令修改目录权限。 chmod -R 755 /var/IEF
  • 操作步骤 安装GPU驱动。 下载GPU驱动,推荐驱动链接: https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/tesla/440.33.01/NVIDIA-Linux-x86_64-440.33.01.run&lang=us&type=Tesla 执行如下安装驱动命令。 bash NVIDIA-Linux-x86_64-440.33.01.run 执行如下命令检查GPU驱动安装状态。 nvidia-smi 以root用户登录边缘节点。 执行如下命令。 nvidia-modprobe -c0 -u 创建文件夹。 mkdir -p /var/IEF/nvidia/drivers /var/IEF/nvidia/bin /var/IEF/nvidia/lib64 拷贝驱动文件。 对于CentOS,依次执行如下命令拷贝驱动文件: cp /lib/modules/{当前环境内核版本号}/kernel/drivers/video/nvi* /var/IEF/nvidia/drivers/ cp /usr/bin/nvidia-* /var/IEF/nvidia/bin/ cp -rd /usr/lib64/libcuda* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libEG* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libGL* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libnv* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libOpen* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/libvdpau_nvidia* /var/IEF/nvidia/lib64/ cp -rd /usr/lib64/vdpau /var/IEF/nvidia/lib64/ 对于Ubuntu,依次执行如下命令拷贝驱动文件: cp /lib/modules/{当前环境内核版本号}/kernel/drivers/video/nvi* /var/IEF/nvidia/drivers/ cp /usr/bin/nvidia-* /var/IEF/nvidia/bin/ cp -rd /usr/lib/x86_64-linux-gnu/libcuda* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libEG* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libGL* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libnv* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libOpen* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/libvdpau_nvidia* /var/IEF/nvidia/lib64/ cp -rd /usr/lib/x86_64-linux-gnu/vdpau /var/IEF/nvidia/lib64/ 其中,当前环境内核版本号可以使用uname -r命令查看获取,如下所示,请替换为实际取值。 # uname -r 3.10.0-514.e17.x86_64 执行以下命令修改目录权限。 chmod -R 755 /var/IEF
  • 密钥的使用 您可以在创建容器应用高级配置中选择数据存储时使用Secret。 图2 使用密钥 Secret挂载到容器后,会根据Secret的内容在挂载目录下创建文件,每条密钥数据(属性名-属性值)为一个文件,其中属性名即文件的名称,属性值为文件的内容。例如Secret的属性名为“key”,属性值为“ZXhhbXBsZSB2YWx1ZQ==”,这条Secret挂载到/tmp0目录下,那么挂载成功后,在/tmp0录下就存在一个名为“key”的文件,其内容为“example value”。
  • 密钥的使用 您可以在创建容器应用高级配置中选择数据存储时使用Secret。 图2 使用密钥 Secret挂载到容器后,会根据Secret的内容在挂载目录下创建文件,每条密钥数据(属性名-属性值)为一个文件,其中属性名即文件的名称,属性值为文件的内容。例如Secret的属性名为“key”,属性值为“ZXhhbXBsZSB2YWx1ZQ==”,这条Secret挂载到/tmp0目录下,那么挂载成功后,在/tmp0录下就存在一个名为“key”的文件,其内容为“example value”。
  • 注意事项 为了让您的边缘节点应用更稳定可靠的运行,IEF不会主动升级您的边缘节点上的EdgeCore,需要由您在业务影响最小的时间窗内进行节点升级,以减轻对您业务的影响。 处于维护周期中的版本升级,边缘节点上的应用业务不会中断,如果您有使用消息路由功能,可能会有短暂影响。 处于维护周期外的版本升级,可能会因为容器重启引起业务的短暂中断。 请勿在节点升级过程中变更节点配置,比如重启Docker、安装卸载GPU/NPU驱动、OS内核升级、变更网络配置等,这些操作会增大节点升级失败风险。
  • 注意事项 为了让您的边缘节点应用更稳定可靠的运行,IEF不会主动升级您的边缘节点上的EdgeCore,需要由您在业务影响最小的时间窗内进行节点升级,以减轻对您业务的影响。 处于维护周期中的版本升级,边缘节点上的应用业务不会中断,如果您有使用消息路由功能,可能会有短暂影响。 处于维护周期外的版本升级,可能会因为容器重启引起业务的短暂中断。 请勿在节点升级过程中变更节点配置,比如重启Docker、安装卸载GPU/NPU驱动、OS内核升级、变更网络配置等,这些操作会增大节点升级失败风险。
  • 消息端点 IEF提供如下默认消息端点: SystemEventBus:边缘节点上的MQTT,代表节点通信,可以作为源端点向云上发数据,也可以作为目的端点,接收云上消息。端点资源为边缘节点MQTT Topic。 SystemREST:云端的REST网关接口,可以作为源端点,向边缘侧发送REST请求。端点资源为REST请求的路径。 您还可以创建如下消息端点: Service Bus:边缘节点上的事务请求处理端点,可以作为目的端点,处理文件上传请求。端点资源为REST请求的路径。 DIS: 数据接入服务 ,可以作为目的端点,接收由IEF转发的数据。端点资源为在DIS服务中创建的DIS通道。 APIG:API网关服务,可以作为目的端点,接收由IEF转发的数据。端点资源为在API网关服务中创建的API地址。
  • 消息路由 目前支持如下几种消息转发路径: SystemREST到Service Bus:通过调用云端的REST Gateway接口,获取边缘节点上的文件服务。需配合边缘市场中的边缘文件服务应用一起使用。 SystemREST到SystemEventBus:通过调用云端的REST Gateway接口,向边缘节点中的SystemEventBus(MQTT broker)发送消息。 SystemEventBus到DIS/APIG服务:您可以将终端设备数据发送到边缘节点SystemEventBus(MQTT broker)的自定义Topic中,IEF会将这些数据转发到DIS通道或APIG后端地址。数据转发到DIS通道或者APIG后端地址后,您可以提取这些数据,并对数据进行处理分析。这条路径需要在创建消息路由时自定义MQTT Topic,自定义Topic的详细说明请参见自定义Topic。
  • 消息端点 IEF提供如下默认消息端点: SystemEventBus:边缘节点上的MQTT,代表节点通信,可以作为源端点向云上发数据,也可以作为目的端点,接收云上消息。端点资源为边缘节点MQTT Topic。 SystemREST:云端的REST网关接口,可以作为源端点,向边缘侧发送REST请求。端点资源为REST请求的路径。 您还可以创建如下消息端点: Service Bus:边缘节点上的事务请求处理端点,可以作为目的端点,处理文件上传请求。端点资源为REST请求的路径。 DIS:数据接入服务,可以作为目的端点,接收由IEF转发的数据。端点资源为在DIS服务中创建的DIS通道。 APIG:API网关服务,可以作为目的端点,接收由IEF转发的数据。端点资源为在API网关服务中创建的API地址。
共100000条