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

Eclipse Hono 支持 Apache Kafka 进行消息传递

Eclipse Hono 是一个开源项目,用于将大量异构设备连接到(云)后端。 Hono 定义了支持设备之间统一通信的服务接口,这些设备可能使用广泛不同的协议以及业务应用程序。该项目已经存在了一段时间,并已成功用于博世物联网设备管理多年。新的是它现在支持 Apache Kafka 进行消息传递。本文将介绍由此带来的好处和使用 Hono 的变化。

来自设备的数据在 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 集群由协调数据写入(和读取)到永久存储的代理组成。这种差异有两个后果:首先,消息在最终被删除之前可以检索一段时间。为了在 Hono 中使用 AMQP 实现这种效果,您通常会提供一个单独的消息代理,其中 事件 如果业务应用程序暂时不可用,则存储以避免消息丢失。使用 Kafka,每条消息都被存储。这包括遥测消息(但是,存储时间取决于 Kafka 集群中遥测主题的配置)。其次,通过永久存储进行通信将发送和接收操作彼此分离:如果当前没有消费者连接,协议适配器不能再向设备报告。相反,它只是存储消息而不“知道”业务应用程序是否或何时读取它们。

尝试一下

安装Hono时,需要部署AMQP消息网络或Kafka集群。也可以将 Hono 配置为使用 两者 消息系统。然后,可以将每个租户(设备和配置的子集)配置为使用 AMQP 或 Kafka。 Hono 项目在 Internet 上提供了一个可公开访问的沙箱环境,您可以在其中使用 AMQP 或基于 Kafka 的消息传递来试验 Hono。

实际例子

在下文中,我们将通过一个小示例向您介绍如何在 Hono 沙箱中使用基于 Apache Kafka 的消息传递。您将向 HTTP 协议适配器发送一条遥测消息,然后从 Kafka 集群中读取。

我们通过从命令行发送 HTTP 命令来模拟支持 Internet 的设备。为此,我们使用流行的开源工具 curl .如果您的电脑当前没有安装,请参考 curl 主页上的安装说明。为了模拟业务应用程序,我们使用 Hono 的命令行客户端,可以从 Hono 下载页面下载。请注意,Java 必须至少安装到版本 11 才能运行。

如果下面显示的任何命令不起作用(这些指令总是会发生),请参阅 Kafka 消息传递指南,其中的解释涵盖了更多详细信息。

注册设备

首先,您需要在沙箱中创建一个新租户,以避免干扰其他用户。以下命令创建一个具有随机 ID 的租户,并将其配置为使用 Kafka 进行消息传递。

$ curl -i -H "content-type:application/json" --data-binary '{ “分机”:{ “消息类型”:“卡夫卡” } }' http://hono.eclipseprojects.io:28080/v1/tenants

输出应包含以下内容:{"id":"85f63e23-1b78-4156-8500-debcbd1a8d35"} .

现在复制这个 ID 并将其设置为环境变量,如下所示:

$出口MY_TENANT=85f63e23-1b78-4156-8500-debcbd1a8d35

为租户注册设备:

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

并再次提供返回的 ID 作为环境变量,如下所示:

$出口MY_DEVICE=4412abe2-f219-4099-ae14-b446604ae9c6

最后为设备设置密码:

$ export MY_PWD=my-pwd $ curl -i -X PUT -H "content-type:application/json" --data-binary '[{ "type":"散列密码", "auth-id":"'$MY_DEVICE'", “秘密”:[{ "pwd-plain":"'$MY_PWD'" }] }]' http://hono.eclipseprojects.io:28080/v1/credentials/$MY_TENANT/$MY_DEVICE

发送消息

现在您已经注册了设备,您可以发送和接收消息了。

打开第二个终端窗口以接收消息。转到您下载 Hono 命令行客户端的目录。现在使用以下命令启动客户端,确保替换 my-tenant 使用您刚刚创建的租户的 ID:

# hono-cli-*-exec.jar 文件下载到的目录 $ 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] 创建成功,按 ctrl-c 退出

现在您可以从模拟设备向 Hono 发送消息。为此,请切换回第一个终端窗口。以下命令向 HTTP 协议适配器发送遥测消息:

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

现在应该在第二个终端中打印该消息。

您还可以发送事件 :

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

现在,您应该已经成功地从设备向 Hono 发送消息并从 Kafka 集群接收它们。下一步,您可以查看 Hono 的 Kafka Messaging Guide 中更详细的示例。它还向您展示了如何从业务应用程序向设备发送命令并对其做出响应。如果你想深入挖掘,你可能想看看基于 Kafka 的 API 的规范,可以在 Hono 的 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 发布:一个开放的物联网连接平台
  7. Eclipse Hono 中基于 X.509 的设备身份验证
  8. 适用于恶劣环境的 PCB
  9. 用于制造 PCB 的设计
  10. 5G PCB 制造
  11. 如何为工业 4.0 做准备
  12. 资产管理的4个目标