我正在HiveMQ Websocket Client
工作,我正面临message delivery
的一些问题。
所以,我发现了PUBACK
让我向你解释我的理解,然后我会问我的问题。
每当我们发送带有QOS1
的邮件时,hivemq服务器都会通过PUBACK
回调确认发件人。
现在,我计划在我的websockets中将subcibe替换为onPubackReceived事件,但是在发送消息后事件没有触发。
我的代码:
var clientId = ClientIdentifier;
mqtt = new Messaging.Client(
host,
port,
clientId);
var options = {
timeout: 3,
keepAliveInterval: 60,
useSSL: useTLS,
cleanSession: cleansession,
onSuccess: onConnect,
onFailure: function (message) {
connected = false;
setTimeout(MQTTconnect, reconnectTimeout);
}
};
mqtt.onConnectionLost = onConnectionLost;
mqtt.onMessageArrived = onMessageArrived;
mqtt.onPubackReceived = OnPubackReceived;
当连接丢失且邮件到达时,onConnectionLost
和onMessageArrived
都正常触发,但onPubackReceived
未触发。
如果我理解正确或者我犯了一些错误,请告诉我?
答案 0 :(得分:4)
这不是HiveMQ问题。
我的假设是,您使用HiveMQ Websocket Client作为实施的起点。
在任何情况下,Paho MQTT Client都没有 <Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
<!--<Exec Command="bower install" />-->
<Exec Command="dotnet bundle" />
</Target>
字段。
如果您提供有关您的用例的更多详细信息或您的邮件传递问题,我可能会指出您正确的方向。
编辑:
您所描述的内容在MQTT中称为onPubackReceived
。保证收到消息至少一次。
如果没有收到Quality of Service 1
,则保留此保证并因此重新发送消息是客户端实现的工作。在您的应用程序中手动干扰此行为将导致客户端持久性不一致。
为了澄清:
简单地设置PUBACK
不会导致邮件被识别为重复邮件。它还必须与原始版本具有相同的duplicate=true
。
我无法找到任何关于messageID
保持服务质量= 1的文档。
但是,MQTT.js会这样做。
QoS 1:至少收到一次:只要客户端未收到服务器的确认,就会发送和存储数据包。 MQTT确保它将被接收,但可能存在重复。
总结一下:
paho.js
通过Websockets工作并确保保留MQTT.js
希望这有帮助。