1 RabbibMQ简介
参见博客:RabbitMQ基础系列:原理及工作过程
2 连接RabbitMQ
2.1 方式1
var amqp = require("amqp");
var rabbitmqInfosDev = {
hostname:"localhost",
port:"5672",
login:"admin",
password:"admin",
authMechanism: "AMQPLAIN",
vhost:"/",
ssl: {
enabled: false
}
};
var connectionMQ = amqp.createConnection(rabbitmqInfosDev);
module.exports = connectionMQ;
2.2 方式2
var amqp = require("amqp");
var connectionMQ = amqp.createConnection({url:"amqp:admin:admin@localhost:5672"});
module.exports = connectionMQ;
3 消息传递
3.1 连接
var connectionMQ = require("./config/rabbitmqConfig.js");
connectionMQ.on("error", function(e){
console.log("error:",e);
});
connectionMQ.on("ready", function(){
console.log("RabbitMQ connect successfully!");
});
3.2 发布与订阅消息
3.2.1 发布消息
- 默认方式发布
connectionMQ.publish("per-queue", JSON.stringify(params))
- exchange方式发布
let exchangeConfig = {
type: "direct",
durable: true,
autoDelete: false
}
connectionMQ.exchange("b-exchange", exchangeConfig, function(exchange){
connectionMQ.queue("b-queue", mqConfig, function(queue){
queue.bind("b-exchange", "b-queue", function(){
exchange.publish("b-queue", JSON.stringify(params));
});
});
});
3.2.2 订阅消息
- 默认方式订阅
let mqConfig = {
durable: true,
autoDelete: false
}
connectionMQ.queue("per-queue", mqConfig, function(queue){
queue.bind("#");
queue.subscribe(function(message, header, deliveryInfo){
if(message.data){
var messageText = message.data.toString();
var datas = JSON.parse(messageText);
console.log("datas:",datas);
}
});
});
- exchange订阅
let mqConfig = {
durable: true,
autoDelete: false
}
connectionMQ.queue("b-queue", mqConfig, function(queue){
queue.bind("b-exchange", "#");
queue.subscribe(function(message, header, deliveryInfo){
if(message.data){
var messageText = message.data.toString();
var datas = JSON.parse(messageText);
console.log("name:",datas.name);
}
});
});
3.3 完整路由
- 使用默认方式
app.post("/mq/publisher-default", urlencodedParser, function(req, res){
let params = req.body;
let mqConfig = {
durable: true,
autoDelete: false
}
connectionMQ.publish("per-queue", JSON.stringify(params));
connectionMQ.queue("per-queue", mqConfig, function(queue){
queue.bind("#");
queue.subscribe(function(message, header, deliveryInfo){
if(message.data){
var messageText = message.data.toString();
var datas = JSON.parse(messageText);
console.log("datas:",datas);
}
});
});
res.json({code:200});
return;
})
- 使用exchange方式
app.post("/mq/publisher", urlencodedParser, function(req, res){
let params = req.body;
let exchangeConfig = {
type: "direct",
durable: true,
autoDelete: false
}
let mqConfig = {
durable: true,
autoDelete: false
}
connectionMQ.exchange("b-exchange", exchangeConfig, function(exchange){
connectionMQ.queue("b-queue", mqConfig, function(queue){
queue.bind("b-exchange", "b-queue", function(){
exchange.publish("b-queue", JSON.stringify(params));
});
});
});
connectionMQ.queue("b-queue", mqConfig, function(queue){
queue.bind("b-exchange", "#");
queue.subscribe(function(message, header, deliveryInfo){
if(message.data){
var messageText = message.data.toString();
var datas = JSON.parse(messageText);
console.log("name:",datas.name);
}
});
});
res.json({code:200});
// return;
})
4 注意事项
- 在Unbuntu服务器部署时,使用方式1连接RabbitMQ;
- 在CentOS服务器部署时,使用方式2连接RabbitMQ;