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

时间:2015-06-02 05:42:35

标签: node.js rabbitmq mqtt

这就是我想要做的事情:

我想使用MQTT将我的客户端连接到Node.JS server,然后从那里(Node.JS Server)连接我想要处理所有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服务器的客户端。但我无法弄清楚连接的方式。

2 个答案:

答案 0 :(得分:3)

刚刚实现了同样的目标。希望答案有所帮助

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 App ),它只能通过websocket使用mqtt.js进行协商

  

在撰写这篇文章时,没有任何cordova插件   支持 iOS 仅限Android 插件可用。按照这个   link

所以我采用了 Mqtt.js 的websocket实现,它支持在cordova上运行的 iOS(9.3+)和Android(4.4.4 +)/ Cross-walk 网页视图/浏览器

此处Mosca用作 Node.js 发布/订阅http服务器网关,该网关连接到我的 Mosquitto-RabbitMQ 后端。最后,我的移动应用程序与mosca交谈,后者又与Mosquitto交谈。

答案 1 :(得分:1)

你有不同的可能性,只是弄清楚其中两个:

a)你在尝试这个吗?

MQTT客户端A - &gt; Node.js / mosca Broker 1 bridged - &gt; RabbitMQ Broker 2

b)为什么不这个呢?

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

MQTT客户端A&lt; - &gt; RabbitMQ Broker 1&lt; - &gt; Node.js / MQTT.js客户端B

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