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
69KB
1K SLoC
cerk_port_mqtt_mosquitto
⚠️ 此端口需要本地存在特殊构建的 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文档注释
cargo安装cargo-readme
cargo readme > README.md
许可证
Apache-2.0 许可证
依赖项
~7–19MB
~268K SLoC