问题标签 [emq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1161 浏览

ssl - 使用新 SSL 证书时出现“tlsv1 alert unknown ca”错误

我正在使用来自 Digicert 的 SSL/TLS 证书配置 emqtt MQTT Broker。几年前我已经为同一个代理完成了 SSL 配置,这很好。但是,当我使用新证书配置新代理安装时,我收到“未知 CA”错误。

这是 SSL 设置:

这是我在服务器日志中看到的错误:

这可能是新 CA 证书的问题吗?也许它需要更多的依赖证书链?

更新 这似乎是一个操作系统问题。当我在服务器中使用“openssl verify”测试证书时出现以下错误:

使用相同的命令和相同的证书在我的本地 PC 上验证是否成功

我使用“yum update ca-certificates”更新了操作系统根证书,但我仍然收到相同的错误

0 投票
1 回答
64 浏览

python - 重新连接后订阅者没有收到消息

注意我EMQX用作代理和python-paho客户端库。我不确定是谁对这个问题负责。

如果发布者有一段时间没有发送任何消息,订阅者会断开连接,但也会再次重新连接(因为 loop_forever 会自动处理重新连接)。但是重连后,如果生产者再次开始发送数据,自动重连的服务器不会收到任何消息。在这种情况下,订阅者需要重新启动(手动重新连接)

我的订阅者

我的发布者:

如何解决这个问题呢?

0 投票
2 回答
495 浏览

mqtt - emqx MQTT broker 重启后会话不持久

我正在使用 emqx 代理,我想在磁盘上保留会话,以便在代理因任何原因重新启动时可以恢复会话。

我所做的:

  • 使用 docker-compose 启动 emqx 代理:
  • 使用此配置启动 Go 发布客户端并发布消息:

和消息:

  • 然后我断开客户端“sub1”并使用 qos=1 发送第二条消息:

此消息未传递到客户端“sub1”,因此代理将其排队(qos=1)。事实上,如果我重新启动 sub1 客户端,它确实会收到消息“test2”。
但是,如果我在重新启动客户端“sub1”之前重新启动代理,那么“test2”会丢失并且不会被传递。

我尝试使用retainset to进行相同的测试,true即使在代理重新启动后,消息“test2”也能很好地传递。因此代理将保留的消息保存在磁盘上,但不是客户端会话。

知道为什么吗?是否有我应该更改的配置以将客户端会话保留在磁盘上?

0 投票
0 回答
196 浏览

docker - Docker + Nginx + EMQX

我想在 Docker 上运行 EMQX。如何在 docker-compose 中使用 Nginx 设置 EMQX 代理?这是我的 docker-compose.yml:

mqtt 代理启动成功,但无法在端口 1883 上访问。

这个 nginx.conf:

我是 Docker 的新手,我不知道如何解决这个问题。

0 投票
1 回答
566 浏览

docker-compose - Docker-compose EMQX 桥接(MQTT 桥接)设置

我正在尝试仅使用 docker-compose 创建 EMQ X 桥接设置(MQTT 桥接)。作为参考,我正在查看官方文档。我想到的用例是将EMQ X Edge ( emqx-edge) 桥接到 EMQ X( emqx),然后当消息发布到它时,emqx-edge它会被转发到emqx。到目前为止,我已经创建了两个代理和一个网络,因此它们可以通信(poc-bridge)。

问题是:当一条消息发布到一个主题(例如sensor1/#)给emqx-edge代理时,它永远不会到达emqx代理。我不知道出了什么问题..

Bellow 是我目前拥有的 docker-compose。

0 投票
1 回答
124 浏览

node.js - 带有 MQTT 客户端的 Nodejs 集群

我有一个 nodejs 引擎,它使用 MQTT 订阅来自许多 IoT 设备的消息。随着物联网设备数量的增加,我想以集群模式运行nodejs引擎。这导致每个集群都接收到所有 MQTT 消息。有没有办法避免这种情况?一种仅接收一次 MQTT 消息并且服务消息的负载可以平均分配的方式。

设置:

带有 MQTT 客户端的 Nodejs 引擎通过 EC2 实例中的 pm2 运行。在另一个 EC2 实例中运行的 MQTT 代理。

0 投票
1 回答
52 浏览

ssl - 是否可以使双向 SSL 异步?

是否可以使双向 SSL 异步?

客户端验证服务器ssl证书无误后,可以成功建立连接,客户端可以开始发布消息了。这个过程就像单向 SSL。

然后服务器将异步检查客户端 ssl 证书。并且在检查期间,客户端可以正常发布消息,服务器可以处理这些消息并响应ACK。一旦服务器异步发现客户端 ssl 证书有问题,服务器将终止与客户端的连接。

这样的要求能达到吗?如果可能,我应该怎么做?

谢谢你的帮助!

0 投票
1 回答
74 浏览

mqtt - EMQX - 发布具有唯一标识符的 MQTT 主题比静态 MQTT 主题花费更多的时间

我试图在 emqx 代理上发布不同主题的消息。场景在使用一个客户端发布动态主题时需要很多时间,如果我们将主题名称设置为静态,则需要的时间要少得多。

在这里,我发布了相同的结果和代码。

我正在使用带有 Eclipse paho 客户端版本 3 和 Qos 级别 1 的 EMQX 代理。

使用 100 条简单发布消息处理不同主题的时间(在此处将 id 视为动态):

总时间模式 1:/config/{id}/outward::36 sec -----------------> HERE TOPIC 是 DYNAMIC。{id} 是一个变量,其值在循环中发生变化,如下面的代码所示

总时间模式 2:/config/test::1.2 sec ------------------------------------> HERE TOPIC 是 STATIC

我该如何发布具有不同 ID 的消息,以便主题创建不会花费太多时间?

0 投票
1 回答
46 浏览

mqtt - 具有用户属性(时间戳)的 LWT:不正常断开连接

MQTT 新手在这里

使用 EMQX 代理的 MqttNet 库在 .NET 上开发:

我正在使用 MQTTv5 功能“用户属性”在发布时向我的消息添加时间戳。这是完美的工作。

但是,我也需要标记 LWT 消息。在我的连接方法中,我可以提供一个包含时间戳用户属性的 LWT。现在,当我使用 MQQTX 桌面客户端订阅我的 LWT 主题时;我收到了这些消息和 LWT;到目前为止,一切都很好。

但是当我终止我的程序进程时(由此,不优雅地断开连接);我立即收到一条 LWT 消息。问题是我的“时间戳”用户属性具有建立连接时的时间戳(以及 LWT 第一次设置)。

我可以在我的连接方法中将值留空,所以空值 = 不优雅的断开连接;但这不是很优雅

是否有可能拦截从代理发送的 LWT 消息并设置时间戳?

编辑:我找到了“规则引擎”,它让我使用代理时间戳。但到目前为止我只能将它添加到有效负载中(最好是用户属性) EMQ 规则引擎测试

0 投票
1 回答
123 浏览

javascript - 如何使用 NodeJS mqtt、emqx 订阅所有主题/消息

我正在使用mqtt包在 NodeJS 中编写一个 MQTT 订阅者。这个订阅者的目标是接收到任何/所有主题的所有消息,但看起来订阅#(订阅所有主题)似乎不起作用。但是当我#用一个实际的主题名称替换它似乎工作正常。不知道为什么它不工作。

PS:我使用的broker是emqx。

这是下面的代码。