#cloud-events #mqtt #router #cerk

cerk_port_mqtt_mosquitto

这是一个用于 CERK 的包。CERK 是一个用 Rust 编写的开源 CloudEvents 路由器,采用微内核架构。

5 个版本

0.2.11 2021 年 1 月 9 日
0.2.10 2021 年 1 月 9 日
0.2.9 2021 年 1 月 8 日
0.2.8 2021 年 1 月 5 日
0.2.7 2021 年 1 月 4 日

#2#cerk

每月下载量 27

Apache-2.0 许可证

69KB
1K SLoC

cerk_port_mqtt_mosquitto

Build status

⚠️ 此端口需要本地存在特殊构建的 libmosquitto: feat/reliable 分支的 https://github.com/ce-rust/mosquitto

此限制的原因是当前版本的 libmosquitto 在将消息内容传递给应用程序之前,会自动确认接收到的 PUBLISH 消息。需要保留此补丁,直到上游修复此问题(见 https://github.com/eclipse/mosquitto/pull/1932)。

可以通过向 cargo build 命令添加以下两个参数来使用此补丁

  • MOSQUITTO_GIT_URL=https://github.com/ce-rust/mosquitto
  • MOSQUITTO_GIT_HASH=9f834dff9095e6731937d5eac767dbaca46491ac 所有 Docker Compose 配置都使用此二进制文件。

这是一个用于 CERK 的包。CERK 是一个用 Rust 编写的开源 CloudEvents 路由器,采用微内核架构。

简介

CERK 允许您在不同的端口之间路由您的 CloudEvents。端口是云事件交换的传输层绑定。它考虑到模块化和便携性。

组件

CERK 配备了一些预制组件,但实现自定义组件也很容易。

GitHub 上提供了良好的概述 https://github.com/ce-rust/cerk/

此组件:使用 libmosquitto 的 MQTT 端口

此端口将云事件发布到或从 MQTT 主题订阅。

该端口使用 Mosquitto 客户端的分支实现,并根据 CloudEvents 规范发送和接收消息(见 CloudEvents v1.0 的 MQTT 协议绑定)。

我们目前使用分支的原因是crates.io上发布的版本目前不支持libmosquitto的最新版本。由于我们提出了一个对libmostquitto的修改以更好地支持我们的用例,我们需要使用libmosquitto最新版本的头文件。目标是将来使用发布的版本,否则这个端口不能在crates.io上发布(见https://github.com/ce-rust/cerk/issues/88)。

配置

配置应为类型 cerk::kernel::Config::HashMap,并可以有以下字段

必需字段

host

值必须是类型 Config::String,并包含带有协议和端口号的主机名。

例如 Config::String(String::from("tcp://mqtt-broker:1883"))

可选字段

以下配置是可选的。

send_topic

值必须是类型 Config::String,并包含将消息发送到的MQTT主题名称。

例如 Config::String(String::from("inbox"))

subscribe_topic

值必须是类型 Config::String,并包含路由器应该订阅的MQTT主题。

例如 Config::String(String::from("outbox"))

subscribe_qos

值必须是类型 Config::U8,并包含消息交付的服务质量

目前支持以下值

  • 0:最多一次交付(默认)
  • 1:至少一次交付

例如 Config::U8(1)

配置示例

发送事件的最小配置

此配置将连接到代理,但不会发送或接收任何事件。

use std::collections::HashMap;
use cerk::kernel::Config;

let map: HashMap<String, Config> = [
    ("host".to_string(), Config::String("tcp://mqtt-broker:1883".to_string())),
]
.iter()
.cloned()
.collect();

let config = Config::HashMap(map);

发送事件的完整配置

use std::collections::HashMap;
use cerk::kernel::Config;

let map: HashMap<String, Config> = [
    ("host".to_string(), Config::String("tcp://mqtt-broker:1883".to_string())),
    ("send_topic".to_string(), Config::String("inbox".to_string())),
]
.iter()
.cloned()
.collect();

let config = Config::HashMap(map);

接收事件的完整配置

use std::collections::HashMap;
use cerk::kernel::Config;

let map: HashMap<String, Config> = [
    ("host".to_string(), Config::String("tcp://mqtt-broker:1883".to_string())),
    ("subscribe_topic".to_string(), Config::String("outbox".to_string())),
    ("subscribe_qos".to_string(), Config::U8(1)),
]
.iter()
.cloned()
.collect();

let config = Config::HashMap(map);

接收和发送事件的完整配置

use std::collections::HashMap;
use cerk::kernel::Config;

let map: HashMap<String, Config> = [
    ("host".to_string(), Config::String("tcp://mqtt-broker:1883".to_string())),
    ("send_topic".to_string(), Config::String("inbox".to_string())),
    ("subscribe_topic".to_string(), Config::String("outbox".to_string())),
    ("subscribe_qos".to_string(), Config::U8(1)),
]
.iter()
.cloned()
.collect();

let config = Config::HashMap(map);

更新README

原始README文本是位于lib.rs文件中的Rust文档注释

  1. cargo安装cargo-readme
  2. cargo readme > README.md

许可证

Apache-2.0 许可证

依赖项

~7–19MB
~268K SLoC