我的emqttd服务器经常崩溃,我无法弄清楚原因.这是error.log文件的片段:
2018-04-19 10:53:05.215 [error] <0.6456.0> gen_server <0.6456.0> terminated with reason: no match of right hand value {pubrel,76,{1524,127985,200713}} in emqttd_session:acked/3 line 736
2018-04-19 10:53:05.216 [error] <0.6456.0> CRASH REPORT Process <0.6456.0> with 1 neighbours exited with reason: no match of right hand value {pubrel,76,{1524,127985,200713}} in emqttd_session:acked/3 line 736 in gen_server2:terminate/3 line 1157
2018-04-19 10:53:05.216 [error] <0.1107.0> Supervisor emqttd_session_sup had child session started with {emqttd_session,start_link,undefined} at <0.6456.0> exit with reason no match of right hand value {pubrel,76,{1524,127985,200713}} in emqttd_session:acked/3 line 736 in context …Run Code Online (Sandbox Code Playgroud) 我可以使用此 Java 代码订阅 mosquitto 代理,无需用户名和密码。现在,我想订阅一个需要一些虚拟用户名和密码的 emqttd 代理。我怎样才能做到这一点?。谢谢。
http://tgrall.github.io/blog/2017/01/02/getting-started-with-mqtt/#disqus_thread
https://github.com/emqtt/emqttd
package com.mapr.demo.mqtt.simple;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
public class Subscriber {
public static void main(String[] args) throws MqttException {
System.out.println("== START SUBSCRIBER ==");
MqttClient client=new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
client.setCallback( new SimpleMqttCallBack() );
client.connect();
client.subscribe("iot_data");
}
}
Run Code Online (Sandbox Code Playgroud) 在 MQTT 规范中,有一些连接标志用于管理服务器和客户端上的保留和状态。
干净会话规范建议:
3.1.2.4 清理会话位置:连接标志字节的位 1。
该位指定会话状态的处理。客户端和服务器可以存储会话状态,以使可靠的消息传递能够在一系列网络连接中继续进行。该位用于控制会话状态的生存期。
如果 CleanSession 设置为 0,服务器必须根据当前会话的状态(由客户端标识符标识)恢复与客户端的通信。如果没有与客户端标识符关联的会话,服务器必须创建一个新会话。客户端和服务器断开连接后,客户端和服务器必须存储会话[MQTT-3.1.2-4]。
在 CleanSession 设置为 0 的会话断开连接后,服务器必须存储与断开连接时客户端拥有的任何订阅相匹配的进一步 QoS 1 和 QoS 2 消息,作为会话状态的一部分
因此,每当客户端在断开连接后再次连接时,代理都会中继所有未确认的 QoS-1 和 QoS-2 消息。所以,经纪人有一个状态。为了维护每个客户端的状态,服务器将使用一些数据库进行保留。有没有办法为这些消息状态(服务器将存储的)提供生存时间。如何告诉代理丢弃(即不转发)任何早于以下时间的消息;假设5天。
基本上,我们希望使用 clean session = 0 和 QoS-1;但如何清除旧消息的代理状态?不想接收超过 5 天的旧消息,即使未确认也是如此。
我没有看到任何有关如何更改 emqtt.io Web 仪表板的用户名/密码的配置或文档。有谁知道如何改变这个?