我正在尝试手动连接到 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)
})
}