3.Hono通过网关连接到AMQP
使用基于自定义TCP协议的设备连接到Hono的标准AMQP适配器,通过实现 ProtocolGateway在TCP上侦听要执行的命令代表设备,并使用中的AMQP设备客户端类将它们映射到与Hono进行交互
条件
- 下载一个3.8.1及以上的Maven
- jdk17
- 拉取Hono源代码 地址
编译Hono
git clone https://github.com/eclipse-hono/hono.git
export DOCKER_HOST
# in the "hono" folder containing the source code
mvn clean install -Pbuild-docker-image,metrics-prometheus
编译成功之后会产生hono的image
启动网关
网关配置
默认情况下,网关侦听设备(127.0.0.1
)上的端口6666
。这可以在application.yml
文件或通过相应的命令行参数。以同样的方式连接到AMQP可以配置适配器。默认情况下,网关连接到Hono Sandbox的AMQP适配器,使用gw@DEFAULT_TENANT
作为用户名。
gateway:
tcp:
insecurePort: 6666
insecurePortBindAddress: "127.0.0.1"
amqp:
host: hono.eclipseprojects.io
port: 5672
username: gw@DEFAULT_TENANT
password: gw-secret
serverRole: AMQP adapter
quarkus:
log:
console:
color: true
level: INFO
min-level: TRACE
category:
"io.quarkus.vertx.core.runtime":
level: DEBUG
vertx:
prefer-native-transport: true
warning-exception-time: "PT1.5S"
resolver:
cache-max-time-to-live: 0
java -jar target/quarkus-app/quarkus-run.jar
连接到网关
nc 127.0.0.1 6666
- 可以使用
login
命令设置设备标识符,该命令要求将设备标识符作为参数:
login 4712
device [4712] logged in
OK
- 登录后,设备可以发送事件
event Hello there ...
OK
telemetry 0 Unimportant data ...
OK
请注意,只有当下游消费者连接到设备的租户时,这才有效。
设备还可以订阅命令
subscribe
OK
- 如果应用程序发送单向命令,则该命令会记录到控制台
ONE-WAY COMMAND [name: setBrightness]: {"brightness": 25}
常用命令
网关支持以下命令
- login deviceId ----对给定设备进行身份验证。所有后续命令都在已登录设备。此命令可用于通过使用其他设备登录来切换设备上下文
标识符。 - event payload ---- 将payload作为事件发送。
- telemetry qos payload ---- 使用以下内容指示的传递语义将有效负载作为遥测消息发送
服务质量。支持的值为0
(最多一次)和1
(至少一次)。 - subscribe ---- 开始接收命令。只有应用程序发送的单向命令才会转发到控制台。
- unsubscribe ---- 停止接收命令