node.js - 是否可以将 MQTT 客户端连接到以 Node.JS 作为中间网关的 RabbitMQ?

标签 node.js rabbitmq mqtt

这就是我想做的:

我想使用MQTT将我的客户端连接到Node.JS服务器,然后从那里(Node.JS服务器)我想处理所有的发布/订阅。当客户端发布任何消息时,它将转到 Node.JS 服务器,然后从那里发送到 RabbitMQ 并为订阅者反向发送。

流程就像:-

MQTT -> Node.JS -> RabbitMQ.

编辑:

Server.Js

var mosca = require('mosca')
var pubsubsettings = {
    type: 'mqtt',
    json: false,
    mqtt: require('mqtt'),
    host: '127.0.0.1',
    port: 1883
};
var settings = {
    port: 1883,
    backend: pubsubsettings  
};

var server = new mosca.Server(settings);
server.on('ready', setup);


function setup() {
    console.log('Mosca server is up and running')
}


server.on('clientConnected', function (client) {
    console.log('client connected', client.id);
});


server.on('published', function (packet, client) {
    console.log('Published : ', packet.payload);
});


server.on('subscribed', function (topic, client) {
    console.log('subscribed : ', topic);
});

// fired when a client subscribes to a topic
server.on('unsubscribed', function (topic, client) {
    console.log('unsubscribed : ', topic);
});

server.on('clientDisconnecting', function (client) {
    console.log('clientDisconnecting : ', client.id);
});


server.on('clientDisconnected', function (client) {
    console.log('clientDisconnected : ', client.id);
});

这是我在 mosca 主页上找到的内容。我为 RabbitMQ 连接添加了几行。

现在我想创建一个可以连接到此 Node.JS 服务器的客户端。但我不知道如何连接。

最佳答案

刚刚实现了同样的目标。希望回答对您有帮助

var mosca = require("mosca");
var mqtt = require('mqtt');

var pubsubsettings = {
    type: 'mqtt',
    json: false,
    mqtt: require('mqtt'),
    clientId: 'MqttBrokerPublisher',
    username: '<USERNAME>',
    password: '<PASSWORD>',
    host: '<YOUR_HOST>',
    port: 1883,
};

var moscaSettings = {
    //port: 1883,
    backend: pubsubsettings,
    http: {
        port: 3000,
        bundle: true,
        static: './'
    }
}


var server = new mosca.Server(moscaSettings);

server.on('ready', function(){
    console.log('connected to the server');
});

server.on('connect', function(){
    console.log('connected to the server');
});

server.on('clientConnected', function(client) {
    console.log('client connected', client.id);
});

server.on('published', function(packet, client) {
  console.log('Published', packet.payload);
});

server.on('error', function(err) {
  console.log('error', err);
});

说明:

在上面的代码中,我使用混合移动应用程序作为 MQTT 客户端(Cordova 应用程序),它仅使用 mqtt.js 通过 websocket 进行通信。

At the time of writing this post there was no cordova plugin the supported iOS. Android only plugin is available. Follow this link

所以我求助于 Mqtt.js 的 websocket 实现,它支持在 cordova webview/browser 上运行的 iOS (9.3+) 和 Android(4.4.4+)/Cross-walk

这里Mosca用作 Node.js Pub/Sub http 服务器网关,连接到我的 Mosquitto-RabbitMQ 后端。最后,我的移动应用程序与 mosca 通信,而 mosca 又与 Mosquitto 通信。

关于node.js - 是否可以将 MQTT 客户端连接到以 Node.JS 作为中间网关的 RabbitMQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30588201/

相关文章:

node.js - Node 尝试查找很早才在:app:bundleReleaseJsAndAssets阶段删除的包

javascript - 需要相同的模块,不同的路径,变量不共享

node.js - 如何从 OpenShift 上的 nodejs 墨盒访问 mongodb 变量?

java - 如何从 Mosquitto 清除所有保留的 mqtt 消息?

json - 如何使用 node.js 通过 mqtt 发布从 URL 接收的实时流式 json 数据

python - Mqtt TLS 证书验证失败 : self signed certificate

JavaScript 内部工作原理解释

apache-kafka - 如何将事件驱动架构应用于此示例?

node.js - 我可以从我的 NodeJS 应用动态创建 RabbitMQ 铲吗?

python - RabbitMQ 消耗一条消息(如果存在)并退出