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

Is it possible to connect MQTT client to RabbitMQ having Node.JS as intermediate gateway?

这就是我想要做的:

我想使用 MQTT 连接我的客户端到 Node.JS server,然后从那里(Node.JS 服务器)我想处理所有 pub/sub。当客户端发布任何消息时,它将转到 Node.JS server,然后从那里发送到 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 服务器的客户端。但是我不知道怎么连接。

你有不同的可能性,只需找出其中两个:

a) 你在尝试这个吗?

MQTT 客户端 A -> 节点。js/mosca 代理 1 桥接 -> RabbitMQ 代理 2

b) 为什么不是这个?

两个客户端可以通过在 Broker 中发布和订阅相同的主题来交换消息

MQTT 客户端 A <-> RabbitMQ 代理 1 <-> 节点。js/MQTT.js 客户端 B

要实现 MQTT 客户端,请查看: https://github.com/mqtt/mqtt.github.io/wiki/libraries

刚刚达到了同样的效果。希望回答有帮助

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 实现,它同时支持 iOS (9.3+) 和 Android (4.4.4+)/人行横道 运行 在科尔多瓦 webview/browser

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