#mqtt #iot #broker #nats #kafka #light-weight #config-file

bin+lib rumqttd

rumqttd 是用 Rust 编写的性能高效的 MQTT 代理,它轻量级且可嵌入,意味着您可以在代码中将它用作库并扩展功能

34 个版本 (19 个破坏性更新)

0.19.0 2023年12月12日
0.18.0 2023年9月12日
0.17.0 2023年8月15日
0.16.0 2023年7月24日
0.0.1 2020年5月15日

#218 in 网络编程

Download history 2267/week @ 2024-03-14 1978/week @ 2024-03-21 2152/week @ 2024-03-28 1246/week @ 2024-04-04 601/week @ 2024-04-11 862/week @ 2024-04-18 620/week @ 2024-04-25 1129/week @ 2024-05-02 1020/week @ 2024-05-09 1065/week @ 2024-05-16 1008/week @ 2024-05-23 1271/week @ 2024-05-30 888/week @ 2024-06-06 892/week @ 2024-06-13 901/week @ 2024-06-20 436/week @ 2024-06-27

3,259 每月下载量
用于 8 个 Crates (7 个直接)

Apache-2.0

470KB
10K SLoC

rumqttd

crates.io page docs.rs page

Rumqttd 是用 Rust 编写的性能高效的 MQTT 代理。它是轻量级且可嵌入的,这意味着您可以将它用作库并在代码中扩展功能

入门

您可以直接运行代理,通过运行带有配置文件的二进制文件来实现

cargo run --release -- -c rumqttd.toml

示例配置文件位于仓库的根目录中。

构建 docker 镜像

为了在 docker 容器中运行 rumqttd,请在项目的根目录中运行 build_rumqttd_docker.sh 来构建镜像。该 shell 脚本将使用 docker 构建 rumqttd 并将其打包到 alpine 镜像中。然后,您可以使用默认配置运行 rumqttd

./build_rumqttd_docker.sh
docker run -p 1883:1883 -p 1884:1884 -it rumqttd

或者,您可以使用自定义配置文件运行 rumqttd,通过挂载文件并将其作为参数传递

./build_rumqttd_docker.sh
docker run -p 1883:1883 -p 1884:1884 -v /absolute/path/to/rumqttd.toml:/rumqttd.toml -it rumqttd -c /rumqttd.toml

如何使用 TLS

要使用 TLS 将 MQTT 客户端连接到 rumqttd,请使用 provision 创建相关的证书,如下所示

provision ca // generates ca.cert.pem and ca.key.pem
provision server --ca ca.cert.pem --cakey ca.key.pem --domain localhost // generates localhost.cert.pem and localhost.key.pem
provision client --ca ca.cert.pem --cakey ca.key.pem --device 1 --tenant a // generates 1.cert.pem and 1.key.pem

更新 rumqttd 和 rumqttc 的配置文件以包含生成的证书

[v4.2.tls]
    certpath = "path/to/localhost.cert.pem"
    keypath = "path/to/localhost.key.pem"
    capath = "path/to/ca.cert.pem"

您还可以使用 certgentls-genopenssl 生成自签名证书,尽管我们推荐使用 provision。

注意:将包含生成的 TLS 证书的正确配置文件(带有证书的绝对路径)的文件夹挂载到 docker 中的 rumqttd 以启用 TLS 连接。

动态更新日志过滤器

日志级别和过滤器可以动态更新,无需重启代理。要更新过滤器,我们可以向由我们的控制台暴露的 /logs 端点发送 POST 请求,在请求体中以纯文本形式提供新的过滤器。例如,要获取本地运行并暴露在端口 3030 上的 rumqttd 的“调试”级别日志,我们可以这样做:

curl -H "Content-Type: text/plain" -d "rumqttd=debug" 0.0.0.0:3030/logs

过滤器的一般语法是:

target[span{field=value}]=level

因此,对于 ID 为“pub-001”的客户端,其发生的任何日志都会是以下形式:[{client_id=pub-001}]。更多信息请参见这里

依赖关系

~17–33MB
~515K SLoC