Nodejs模块系列:RabbiMQ

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;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值