首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用NodeJS mqtt,emqx订阅所有主题/消息

如何使用NodeJS mqtt,emqx订阅所有主题/消息
EN

Stack Overflow用户
提问于 2021-12-15 13:05:26
回答 1查看 446关注 0票数 1

我正在使用NodeJS包在mqtt中编写MQTT订阅服务器。此订阅服务器的目标是接收所有发送到任何/所有主题的消息,但似乎对# (订阅所有主题)的订阅不起作用。但是,当我用一个实际的主题名称替换#时,它似乎工作得很好。不知道为什么不起作用。

PS:我使用的代理是emqx。

下面是代码。

代码语言:javascript
复制
const mqtt = require('mqtt');

const TOPIC = '#';
const HOST = process.env.HOST || 'localhost';
const PORT = process.env.PORT || 1883;
const USERNAME = process.env.USERNAME || 'username';
const PASSWORD = process.env.PASSWORD || 'password';
const PROTOCOL = 'mqtt';

const clientOption = {
    port: PORT,
    host: HOST,
    username: USERNAME,
    password: PASSWORD,
    protocol: PROTOCOL
};
const client  = mqtt.connect(clientOption);
console.log(`Connecting to mqtt://${HOST}:${PORT}@${USERNAME} topic:${TOPIC} ...`);

client.on('connect', function () {
  console.log(`Connected!`);

  client.subscribe(TOPIC, function(err) {
    if(err) {
      console.error(err);
    } else {
      console.log(`Subscription to ${TOPIC} successful.`);
    }
  });

  client.on('message', function (topic, message) {
    // message is Buffer
    console.log(`Incoming message to topic = ${topic} ...`);
    console.log(message.toString());

    console.log('Preparing outbound message');
    const outboundMsg = {...message, source: topic}
    console.log('Outbound message below');
    console.log(outboundMsg);
  });

});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-15 13:33:47

解决了问题。

问题是,我在一个码头容器中运行emqx,默认情况下,emqx将发布和订阅$SYS/##主题。

这可以在etc/acl.conf文件中重写。

EMQX ACL DOCS

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70364199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档