问题标签 [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 回答
95 浏览

mqtt - Erlang MQTT 配置损坏?

Erlang eMQ 中有一种方法(根据thisthis)可以在我的 MQTT Broker 中启用 emq_auth_username 的插件这意味着我可以配置我的代理以允许基于我的etc/emq_auth_username.conf文件的连接。

我确实创建了文件并放入了类似的条目......

但是 myclient 没有进来:

在此处输入图像描述

我的文件看起来像:

auth.user.$N.username = 管理员

auth.user.$N.password = public

auth.user.$1.username = dummy_username

auth.user.$1.password = dummy_password

auth.user.$N.username = dummy_username

auth.user.$N.password = dummy_password

因为我试图了解它是如何工作的......

任何提示如何在此文件中添加新凭据???

谢谢!

0 投票
1 回答
260 浏览

erlang - 为 erlang vm 增加 max_fds

我有一个emqtt实例安装在gcloud. erlang我必须修改vm的最大文件描述符数。我已经对主机 VM 进行了所有更改,但似乎无法弄清楚我将如何更改max_fdsvm emqtt/etc/emqttd/emq.conf我可以调整没有任何论据。

该命令emqtt_ctl vm io为我提供以下输出:

我想在io/max_fds这里改变。

任何帮助将不胜感激。

0 投票
1 回答
759 浏览

mqtt - 如何缩短 MQTT 代理检查客户端连接状态的时间

我目前使用EMQ作为我们的 MQTT 代理。我需要尽快获得最新的“在线”或只是客户端的连接状态。目前,我让我的后端运行一个订阅 $SYS 主题的客户端,客户端的连接和断开连接事件将作为消息发布到该主题。当客户端连接时,连接的消息将发布到 $SYS/.../connected。断开连接时,将向 $SYS/.../disconnected 发布断开连接的消息。

这种方法的问题是,断开连接的消息只有在客户端正常断开连接时才会立即发布。就像,当客户端故意关闭连接时。但如果断线是因为网络不通或电源切断,则消息将在3分钟或更长时间后发布。

我也尝试使用 LWT(最后遗嘱)方法,但结果与上述类似。所以我猜如果断开连接是无意发生的,客户端将没有机会告诉代理它将与代理断开连接。因此,代理肯定需要一段时间才能注意到客户端实际上已断开连接。

所以,我的问题是,我将如何缩短那个时间?我曾经怀疑“保命”这件事跟这件事有关。但经过几次经验,事实并非如此。

0 投票
0 回答
288 浏览

erlang - EMQ MQTT 在树莓派 2 B+ 上构建成功后无法运行

按照以下说明:http ://www.xappsoftware.com/wordpress/2017/02/28/install-the-emq-broker-also-known-as-emqttd-on-the-raspberry-pi-raspbian/我建最新版本的 Erlang 和随后安装的 deps 终于成功为 emqttd broker (v2.3) 运行了 make。

现在,当我运行可执行文件时,我得到以下输出:

我在谷歌上做了一些研究,发现一些rebar使用这个变量的包的引用,然后我设置它.bash_profile并重新启动,但错误仍然存​​在。

怎么了?

0 投票
1 回答
1011 浏览

emq - EMQ Web Dashboard 用户/密码如何更改?

我没有看到任何关于如何更改 emqtt.io Web Dashboard 的用户名/密码的配置或文档。有谁知道如何改变这个?

0 投票
1 回答
439 浏览

erlang - 表情符号编码和解码erlang从列表到二进制

我希望将此字符串解析为 iOS 的 VOIP 通知为二进制字符串:

我预计 Erlang shell 上打印的数据是:

但是打印出来的时候显示:

我尝试了Encoding emoji in Erlang的解决方案,但它只是给了我一些表情符号字符串,即:

如何在 Erlang shell 中以 Unicode 正确显示它?

0 投票
2 回答
5636 浏览

mqtt - 有什么方法可以为 MQTT Broker 中的消息提供 TTL

在 MQTT 规范中,有一些连接标志来管理服务器和客户端上的保留和状态。

干净的会话规范建议:

3.1.2.4 清除会话位置:连接标志字节的第 1 位。

该位指定会话状态的处理。客户端和服务器可以存储会话状态,以使可靠的消息传递在一系列网络连接中继续。该位用于控制 Session 状态的生命周期。

如果 CleanSession 设置为 0,则服务器必须根据当前会话的状态(由客户端标识符标识)恢复与客户端的通信。如果没有与客户端标识符关联的会话,服务器必须创建一个新会话。客户端和服务器断开后,客户端和服务器必须存储会话 [MQTT-3.1.2-4]。

在将 CleanSession 设置为 0 的 Session 断开连接后,服务器必须存储更多的 QoS 1 和 QoS 2 消息,这些消息与客户端在断开连接时拥有的任何订阅相匹配,作为 Session 状态的一部分

因此,每当客户端在断开连接后再次连接时,代理都会中继所有未确认的 QoS-1 和 QoS-2 消息。所以,经纪人有一个状态。为了维护每个客户端的状态,服务器将使用一些数据库进行保留。有没有办法为这些消息状态(服务器将存储)提供生存时间。如何告诉代理丢弃(即不中继)任何早于的消息;让说5天。

基本上,我们希望使用干净的会话 = 0 和 QoS-1;但是如何用旧消息清除代理状态?不希望收到超过 5 天的旧消息,即使未确认。

0 投票
2 回答
2362 浏览

java - MQTT Retained messages not received when subscribing same topic from different applications at the same time

TL;DR

When subscribing to the same topic tree with multiple clients at the same time, not all clients receive the retained messages as expected!

in detail / use case

In a real project several applications subscribe (nearly at the same time because they are started in parallel) to the same MQTT topic (with wildcard). The topic contains about 500 retained messages (each in an own sub topic level) which all applications are expected to receive (they are subscribing with QoS 1).

Beside the "configuration" messages also data topics are subscribed with the same MQTT connection. No persisted state is required (and wanted here). Therefore the application instances connect with cleanSession=true.

For my understanding it would be sufficient if the application instances would each connect with a fixed clientId as cleanSession=true should avoid any state handling. But to be really sure that no state is considered a unique MQTT clientId is generated for each connect.

observerd behavior

Unfortunately not all application instances get the retained messages.. Some get no messages at all from the topic - regardless of how long the subscription lasts. I first thought that the maxInflight (client side) or max_queued_messages (server side) configuration might be the reasons, but after increasing both to 500,000 I guess this is not the reasons behind the failure.

reproduction as test

Therefore I created this github project with a repro. There is a unit test class in the repro MqttSubscriptionTest with the test method multiThreadSubscriptionTest. When executing this test some (1000) retained messages will be published first in the @BeforeClass method. After that, 10 instances of a MqttSubscriber class which implements the IMqttMessageListener and Runnable interface will be instantiated and executed. Each MqttSubscriber instance will be executed in an own thread with an own MqttClient instance and will subscribe to the topic tree with the retained messages. This is logged to the console as follows:

The test will wait some time and after that validate the subscriptions. It is expected that each Subscriber received the 1000 retained messages:

Most subscriber received the expected 1000 messages in a very short time (some hundreds ms). But some (here Subscriber-7/8) did not receive a single message (duration is 0 because they never finished). The situation is not better when giving the subscribers more time to receive the messages. They just won't get them.

I have no idea why this happens. No error messages are shown on the MQTT broker or client side. If you can give any help this would be super useful for me, because I dependent on the reliable delivery of retained messages.

Repro on GitHub: FrVaBe/MQTT/mqtt-client-showcase/

  • I tested with a local EMQ and HiveMQ broker. If you want to run the test you need to run a broker on your machine at localhost:1883 or change the configuration in the test class.
  • I use the Eclipse Paho Java Client MQTT
  • I subscribe with cleanSession=true because I do not want to have any state (the connection is used to subscribe to several topics and the delivery of missed messages is not wanted)
0 投票
2 回答
3593 浏览

docker - Dockerfile RUN shell-script 在 docker build 期间未运行

我尝试为 EMQ MQTT 服务器构建自定义镜像。但是脚本 update_config.sh 在 docker copmose up 期间不会执行。

Dockerfile:

update_config.sh

我使用 docker-compose 来构建图像。update_config.sh 脚本被复制到映像中,但未执行。

到目前为止我尝试了什么:

  • 使用 COPY 而不是 ADD 来复制文件
  • 尝试了RUN /bin/ash -c /opt/emqttd/etc/update_config.sh以下口味:
    • RUN /bin/ash -c /opt/emqttd/etc/update_config.sh
    • RUN /opt/emqttd/etc/update_config.sh
    • RUN ./update_config.sh
  • 试图在导致错误RUN chmod +x /opt/emqttd/etc/update_config.sh的行之前添加chmod: /opt/emqttd/etc/update_config.sh: Operation not allowed during buildRUN /bin/ash -c /opt/emqttd/etc/update_config.sh

谁能帮我?谢谢。

0 投票
0 回答
1427 浏览

erlang - Erlang mqtt不断崩溃

我的 emqttd 服务器经常崩溃,我不知道为什么。这是 error.log 文件的片段:

机器上的网络似乎很好。

以下是 erlang.log 中似乎相关的一些行:

谁能告诉我这些错误信息是什么意思?如果我需要发布其他日志数据或配置详细信息,我可以。

编辑:免费 -mh 输出和 htop 输出

htop 输出