Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当新客户端订阅最后一条消息(mqtt,retain)时,如何获取所有消息_Javascript_Mqtt - Fatal编程技术网

Javascript 当新客户端订阅最后一条消息(mqtt,retain)时,如何获取所有消息

Javascript 当新客户端订阅最后一条消息(mqtt,retain)时,如何获取所有消息,javascript,mqtt,Javascript,Mqtt,当新客户端订阅最后一条消息(mqtt,retain)时,如何获取所有消息? 我有两份申请。我设置了retain、clean标志和qos:1。我对这两个应用程序使用了相同的代码。 例如: 应用程序1->用户写入消息:hello-->主题1 应用程序1->用户写入消息:hello2-->主题1 应用程序2->测试用户->连接到主题1 现在test_user应该是从user(app_1)[你好和hello2]获取所有消息,但我只得到“hello2” 你不知道 MQTT不是消息队列系统,而是发布/订

当新客户端订阅最后一条消息(mqtt,retain)时,如何获取所有消息? 我有两份申请。我设置了retain、clean标志和qos:1。我对这两个应用程序使用了相同的代码。 例如:

  • 应用程序1->用户写入消息:hello-->主题1
  • 应用程序1->用户写入消息:hello2-->主题1
  • 应用程序2->测试用户->连接到主题1
现在test_user应该是从user(app_1)[你好和hello2]获取所有消息,但我只得到“hello2”

你不知道

MQTT不是消息队列系统,而是发布/订阅系统。 MQTT将仅对当前脱机的现有客户端的消息进行排队。 新客户端无法查看以前发布到主题的消息


唯一的例外是,如果在发布消息时设置了保留位,那么代理将仅保留最后一条发布到该主题的消息,并设置了保留位。设置了该标志的任何新消息都将替换以前的消息。

确定吗?我将表格添加到postYes,我确定,我写了两个答案。新客户端将永远不会获得除上次保留的消息以外的任何内容。代理将消息排队的唯一方式是,如果该客户端已以高于QOS0的速度连接并订阅了相关主题,并且在重新连接时,将clean session设置为false。对于新客户机,clean session标志设置为什么并不重要,因为代理不知道为该客户机id保留消息。HiveMQ有一个很好的页面来描述这一切:@mmuserdev-使用Apache Kafka之类的东西可能会更好,它可以进行“事件流”,听起来更像您希望做的事情。
    let client = mqtt.connect('http://127.0.0.1:9001', {
      clientId: "front-client",
      username: "u",
      password: "p",
      clean: false
    });
    client.on('connect', (topic) => {
      client.subscribe(this.topic, {qos: 1}, (err) => {
        if (!err) {
          console.log('message sent by mqtt')
        }
      });
    });
    this.mqttClient = client;

    //handle incoming messages
    client.on('message', (topic, message, packet) => {
      //
    });

  sendMsgByMqtt(message: string) {
    this.mqttClient.publish(this.topic, message, {retain: true, qos: 1});
  }