type
status
date
slug
summary
tags
category
icon
password
Language
Hono由一组部署为Docker容器的微服务组成。下图概述了Hono Sandbox部署中的容器。
Hono架构介绍
Hono Instance
- HTTP Adapter : HTTP适配器实例将Hono的遥测和事件API作为URI资源
- MQTT Adapter : MQTT适配器实例,将Hono的遥测和事件API视为通用MQTT主题层次结构
- AMQP Adapter : 将Hono的遥测和事件API作为一组AMQP 1.0地址公开
- Command Router : 用于接收命令和控制消息并将其转发到协议适配器
- Device Registry : 设备注册表实例,用于管理注册信息并向协议适配器发出设备注册声明
- Auth Server : 身份验证服务器实例,用于验证荣誉组件并颁发标识和权限的令牌。
使用Kafka适配器
如果要使用Kafka作为消息传递在本地计运行的Hono需要以下条件
一个单节点的Minikube集群
确保运行
minikube tunnel
以支持创建类型LoadBalancer的Kubernetes服务根据Eclipse Hono README.md 中的说明将Hono安装到本地的Minikube集群中
- Hono部署到本地集群后,运行以下命令创建Hono。之后将使用env文件来设置和刷新一些环境变量:
cat hono.env
PS C:\Users\Lenovo> cat hono.env export REGISTRY_IP=127.0.0.1 export HTTP_ADAPTER_IP=127.0.0.1 export MQTT_ADAPTER_IP=127.0.0.1 export APP_OPTIONS='-H (host name/IP address) -P 9094 -u hono -p hono-secret --ca-file /tmp/truststore.pem --disable-hostname-verification' PS C:\Users\Lenovo>
注册设备
当设备尝试连接到Hono的一个协议适配器时,协议适配器首先尝试使用设备注册表中保存的信息对设备进行身份验证。注册表中维护的信息包括设备所属的租户(逻辑范围)、设备在租户中的唯一身份以及设备用于身份验证的凭据。在设备可以连接到Hono并发布任何数据之前,需要将相应信息添加到设备注册表中。
创建新租户
- 响应
将生成的ID 保存到env文件中
向租户添加设备
- 响应
将生成的ID 保存到env文件中
设置设备密码
准备一个密码放入 env 文件中
- 响应
启动下游示例应用程序
设备生成的遥测数据通常由下游应用程序使用,这些应用程序使用这些数据来实现其相应的业务功能。在本指南中,我们将使用Hono命令行客户端来模拟此类应用程序。客户端将连接到Hono向北的遥测和事件API,订阅所有遥测和事件消息,并将消息记录到控制台。
下载
hono-cli-*-exec.jar
打开一个新的终端窗口,从命令行运行客户端。
应该是jdk版本太低 , 导致无法运行
- 切换到jdk17
Lenovo@DESKTOP-RBQ4DFJ MINGW64 ~ $ java -version java version "17.0.4.1" 2022-08-18 LTS Java(TM) SE Runtime Environment (build 17.0.4.1+1-LTS-2) Java HotSpot(TM) 64-Bit Server VM (build 17.0.4.1+1-LTS-2, mixed mode, sharing) Lenovo@DESKTOP-RBQ4DFJ MINGW64 ~ $ source hono.env $ java -jar hono-cli-*-exec.jar app ${APP_OPTIONS} consume --tenant ${MY_TENANT} Lenovo@DESKTOP-RBQ4DFJ MINGW64 ~ Connecting to Kafka based messaging infrastructure [127.0.0.1:9094] ${MY_TENANT} Consuming messages for tenant [a91fd37e-0749-4813-8141-79b0ec38dcd3], ctrl-c to exit.
将数据发布到HTTP
现在下游应用程序正在运行,设备可以开始使用Hono的协议适配器发布遥测数据和事件。首先,您将使用HTTP协议模拟向Hono发布数据的设备。
- 响应
如果您已经如上所述启动了下游应用程序,那么您现在应该看到遥测消息被输出到另一个终端中的应用程序控制台。输出应如下所示
将事件发布到HTTP
同样,可以看到事件被记录到下游应用程序的控制台。
将数据发送到MQTT
安装Mosquitto
可以使用mosquito_pub命令行客户端 , 下载地址
找到Mosquitto Broker,若为启动状态,点击“停止”,然后右键属性设置为手动启动。若还是不行,则1883端口被占用了。命令行查询:netstat -ano | findstr 1883杀掉进程的命令:taskkill /pid xxx /f如果无法删除,可以通过搜索cmd,用管理员权限打开,然后输入命令终止进程
同样,您现在应该看到消息被记录到下游应用程序的控制台
将事件发送到MQTT
将命令发送到设备
Hono的高级功能, 应用程序向设备发送命令并接收响应,以及在设备上处理命令的结果。这里的通信方向与遥测和事件完全相反。
接收命令
使用mosquito_sub命令可以模拟接收命令的MQTT设备。在终端中为模拟设备创建命令主题订阅:
现在设备正在等待接收命令,应用程序可以开始发送命令。在新的终端窗口中,启动命令行客户端:
在提示符下,输入以下命令以向设备发送带有JSON负载的单向命令:
当然 , 以上也可以在PostMan中进行调用
- 作者:何以问
- 链接:https://heyiwen.com/article/hono-2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。