这就是我想要做的事情:
我想使用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
服务器的客户端。但我无法弄清楚连接的方式。
答案 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