亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

Eclipse Hono新增Apache Kafka支持:设备消息传递更顺畅

Eclipse Hono是连接大量异构设备至(云)后端的开源项目。Hono定义服务接口,实现设备间统一通信——设备可能用截然不同协议——以及业务应用。项目运行已久,在博世IoT设备管理中成功应用多年。新进展是现支持Apache Kafka消息传递。本文介绍由此带来的收益与Hono使用变化。

Eclipse Hono新增Apache Kafka支持:设备消息传递更顺畅

设备数据经Hono协议适配器(如MQTT、HTTP、CoAP适配器)转为统一消息格式,传递给消息系统。业务应用直接从消息系统读取遥测消息或事件(也可用命令与控制向设备发消息并收响应)。消息系统非Hono组成部分需外部提供,迄今用AMQP 1.0协议。

1.7版起,Hono以技术预览支持Apache Kafka消息传递。Hono关键特性是定义并实现消息向/从消息系统转发的API。因API定义基于消息系统并直接依赖其特性,支持新消息系统是Hono根本性创新。Hono所有消息API(遥测、事件、命令与控制)均新增基于Kafka的规范,面向协议适配器与业务应用双向。为确保行为尽可能与基于AMQP的API一致,进行了细致设计。

收益

Apache Kafka是为极高吞吐设计的分布式事件流平台,提供消息顺序特定保证。契合Hono消息传递需求,关键收益:

变化

AMQP 1.0是对等点连接交换消息的通信协议。相反,Kafka集群由协调数据写入(读取)持久存储的代理组成。此差异有两后果:第一,消息在最终删除前可用一段时间检索。用AMQP在Hono达成此效果,通常提供单独消息代理存储事件以防业务应用暂时不可用时消息丢失。Kafka下所有消息均存储,含遥测消息(存储时长取决于Kafka集群遥测主题配置)。第二,经持久存储通信解耦发送接收操作:协议适配器无法再向设备反馈当前无消费者连接。取而代之,它仅存储消息,"不知"业务应用何时或是否读取。

试用指南

安装Hono需部署AMQP消息网络或Kafka集群。也可配置Hono同时用两套消息系统。各租户(设备与配置子集)可独立配置用AMQP或Kafka。Hono项目提供公开沙箱环境,可在线体验AMQP或Kafka消息传递。

实战示例

演示如何在Hono沙箱使用基于Kafka消息传递。用HTTP协议适配器发送遥测消息,再从Kafka集群读取。

用命令行发HTTP命令模拟联网设备,用流行开源工具curl。未安装请参考curl官网。模拟业务应用用Hono命令行客户端,从Hono下载页获取。需Java 11+运行。

若下述命令失效(此类说明常有此情况),请参考Kafka消息指南获取更详细解释。

注册设备

先在沙箱创建新租户避免干扰他人。以下命令创建租户并配置用Kafka消息传递:

$ curl -i -H "content-type: application/json" --data-binary '{
 "ext": {
 "messaging-type": "kafka"
 }
}' https://hono.eclipseprojects.io:28080/v1/tenants

输出应含类似:{"id":"85f63e23-1b78-4156-8500-debcbd1a8d35"}。

复制此ID设为环境变量:

$ export MY_TENANT=85f63e23-1b78-4156-8500-debcbd1a8d35

为租户注册设备:

$ curl -i -X POST https://hono.eclipseprojects.io:28080/v1/devices/$MY_TENANT

再次将返回ID设为环境变量:

$ export MY_DEVICE=4412abe2-f219-4099-ae14-b446604ae9c6

最后设置设备密码:

$ export MY_PWD=my-pwd
$ curl -i -X PUT -H "content-type: application/json" --data-binary '[{
 "type": "hashed-password",
 "auth-id": "'$MY_DEVICE'",
 "secrets": [{
 "pwd-plain": "'$MY_PWD'"
 }]
}]' https://hono.eclipseprojects.io:28080/v1/credentials/$MY_TENANT/$MY_DEVICE

发送消息

设备注册后可收发消息。

打开第二终端窗口接收消息。进入Hono命令行客户端下载目录。启动客户端:

# in directory where the hono-cli-*-exec.jar file has been downloaded to
$ java -jar hono-cli-*-exec.jar --spring.profiles.active=receiver,sandbox,kafka --tenant.id="my-tenant"

输出含类似行即就绪:
10:23:01.807 [vert.x-eventloop-thread-0] INFO org.eclipse.hono.cli.app.Receiver - Receiver [tenant: 85f63e23-1b78-4156-8500-debcbd1a8d35, mode: all] created successfully, hit ctrl-c to exit

回首终端,发送遥测消息到HTTP协议适配器:

$ curl -i -u $MY_DEVICE@$MY_TENANT:$MY_PWD -H "content-type: application/json" --data-binary '{"temp": 42}' https://hono.eclipseprojects.io:8080/telemetry

消息应在第二终端打印。

也可发送事件:

$ curl -i -u $MY_DEVICE@$MY_TENANT:$MY_PWD -H "content-type: application/json" --data-binary '{"hello": "kafka"}' https://hono.eclipseprojects.io:8080/event

希望您已成功将消息从模拟设备发至Hono并从Kafka集群消费。后续可参考Hono Kafka消息指南更详细示例,含业务应用向设备发命令并获响应。若想深入,可查阅Hono API规范中的Kafka基础API规格。

结语

消息系统是Eclipse Hono核心功能基础,其接口构建于之上。支持Kafka与AMQP 1.0并存是Hono深远变革,极力确保接口易映射。Kafka关键优势:扩展性、顺序保证、广泛采用、丰富商业服务。与AMQP主要差异:所有消息类型均经代理,即接收端暂时断连消息仍可投递;通信在时间上也解耦,消息发送方不再能获接收方直接反馈。简短实战例演示了如何从模拟设备发消息至Hono沙箱并从Kafka集群消费。

工业技术

  1. 元素与高温超导体临界温度表(开尔文)
  2. 绝缘材料介电强度——电气工程师关键数据
  3. 核心求导法则速查手册
  4. 基本原函数法则:常数、和与差
  5. Eclipse Hono发布基于MongoDB的设备注册表:可扩展、生产就绪
  6. Eclipse Hono 1.0.0发布:统一开源IoT连接平台
  7. 极端环境下的坚固PCB:设计、优势与应用
  8. PCB制造设计优化(DFM):关键策略与最佳实践
  9. 5G时代PCB制造:趋势与挑战
  10. 掌控工业 4.0:为企业未来护航的实战步骤指南
  11. 高效资产管理的四大核心目标
  12. Eclipse Hono 中基于 X.509 证书的设备安全认证实战