1

我正在尝试手动连接到 MQTT 服务器,然后订阅多个主题。我可以手动连接,但无法使用相同的 MQTT 服务连接多个主题。
库为 Angular 使用了 ngx-mqtt

问题/问题:- 当尝试连接到第二个主题时,第二个主题将附加到第一个主题。

请参阅下面的图片,该图片不起作用,并且我的 MQTT 服务器正在拒绝我的呼叫,因为 2 个主题附加在第二个主题的一个请求中,这已在下面给出的代码中尝试了多种方式。

在此处输入图像描述

请参阅下面的图片,该图片正在处理另一个旧代码。

在此处输入图像描述

非常差的 ngx-mqtt 文档导致询问 MQTT 问题。

在下面的代码中尝试了几件事是其中的两件事,即

根据文档创建一个 observable 并订阅

添加两个主题后创建一个 Observable 然后订阅它

  mqttServiceOpts1: IMqttServiceOptions = {
    connectOnCreate: false,
    hostname: 'example-mqtt.ca',
    port: 8090,
    path: '/mqtt',
    protocol: 'wss'
  }
  connetMqtt() {
    
    return new Promise((resolve, reject) => {
    this.getmqttDetails()
        .subscribe((data) => {
         
            console.log(data.port)
            console.log(data.clientId)
            console.log(data.broker)
            this.mqttServiceOpts1.clientId = data.clientId
            this.mqttService.connect(this.mqttServiceOpts1);

            const responsePustatusName= data.rootTopic + '/pustatus/inbox/+/response';
            const vacateRooutetopicName= data.rootTopic + '/vacateroute/wc/+/route/response';
            console.log('Response Topic Name ' + responsePustatusName);

           this.obs1$ = this.mqttService.observe(responsePustatusName)
           this.obs1$ = this.mqttService.observe(vacateRooutetopicName)
            this.subs2$ = this.obs1$.subscribe((message: IMqttMessage) => {
              console.log('msg: ', message.payload.toString())
              });
              
          })
          resolve(true)
        })
    }

创建了 2 个不同的 observables

 mqttServiceOpts1: IMqttServiceOptions = {
    connectOnCreate: false,
    hostname: 'exmp-mqtt.ca',
    port: 8090,
    path: '/mqtt',
    protocol: 'wss'
  }
  connetMqtt() {
    
    return new Promise((resolve, reject) => {
    this.getmqttDetails()
        .subscribe((data) => {
         
            console.log(data.port)
            console.log(data.clientId)
            console.log(data.broker)
            this.mqttServiceOpts1.clientId = data.clientId
            this.mqttService.connect(this.mqttServiceOpts1);

            const responsePustatusName= data.rootTopic + '/pustatus/inbox/+/response';
            const vacateRooutetopicName= data.rootTopic + '/vacateroute/wc/+/route/response';
            console.log('Response Topic Name ' + responsePustatusName);

           this.subs1$ = this.mqttService.observe(responsePustatusName).subscribe((message: IMqttMessage) => {
              console.log('msg: ', message)
            });
            this.subs2$ = this.mqttService.observe(vacateRooutetopicName).subscribe((message: IMqttMessage) => {
              console.log('msg: ', message)
              });
              
          })
          resolve(true)
        })
    }
4

0 回答 0