nodejs -- 使用rabbitMq

1:創立鏈接對象

   

var amqp = require("amqp");
var connOptions = {
    host: "127.0.0.1"
    , port: 5672
    , login: "cd"
    , password: "123456"
    , authMechanism: "AMQPLAIN"
    , vhost: "/"
    , ssl: {
    enabled : false
    }
}
var conn = amqp.createConnection(connOptions); //連接rabbitmq
或者

var connection = amqp.createConnection({url: "amqp:cd:[email protected]:5672"}); 

2:

var exchOption = {
type: "topic"
,durable: true
,autoDelete: false
,confirm: false     //這裏是publish之後的callback執不執行,要設置爲true
}


conn.on("ready",function(){
    console.log("ready");
    var exch = conn.exchange("topic",exchOption,function(exchange){
        now = new Date();
        mill = now.getMilliseconds();
        console.log(now,mill);
        for (var i = 0; i <100000; i++) {
        exchange.publish("topic","aaaaa","",messFunc); //發佈消息 因爲exchange屬性confirm爲false,此處不會回調messFunc
        }
        now = new Date();
        mill = now.getMilliseconds();
        console.log(now,mill);
        }); //獲取exchange 生成生產者
}); //rabbitmq連接成功調用

暫時不知道的 
var messOption = {
contentEncoding: "utf-8"
,deliveryMode: 1
}

3:消費者

var ampq = require('amqp');  
  
var connection = ampq.createConnection({url: "amqp:cd:[email protected]:5672"});  
  
var bStop = false;  
  
connection.on('ready', function () {  
    connection.queue('topic', { durable: true, autoDelete: false }, function (queue) {  
        //console.log('Queue ' + queue.name + ' is open!');  
        queue.bind("topic","topic");
        queue.subscribe(function (message, header, deliveryInfo) {  
           console.log(message.data.toString());
        });  
        
    });  
});  


簡單的例子

connection.queue('testQueue', { durable: true, autoDelete: false }, function (queue) {
			connection.publish('testQueue', 'this is message is testing ......'); 
			res.send('send');
		});   //發送

		connection.queue('testQueue', { durable: true, autoDelete: false }, function (queue) {
			queue.subscribe(function(text, headers, deliveryInfo, messageObject){
				console.log(messageObject)
				res.send(text.data.toString());
			});
		}); //消費

const amqp = require("amqp");
let config=  {
    host:"192.18.1.28",
	port:5,
	login:"dev",
	password:"devl",
	authMechanism: "AMQPLAIN" ,
	vhost:"/",
	ssl: {  
		enabled : false  
    }  
  }
  let conn = amqp.createConnection(config); //連接rabbitmq

  conn.on('ready', function (data) {
     console.log("連接成功")
     var exch = conn.exchange("exchange",{type: 'topic',durable:true,autoDelete:false,confirm:true},function(exchange){  //durable這個要正確喲
            console.log("開始發送")
            for (var i = 0; i <10; i++) {
            exchange.publish('topic',{hash:"chendong"},{mandatory: true},()=>{
                console.log("aaaaaaaaaaaaa發送成功")  //回調
            }); 
            }
            conn.disconnect()
        }); //獲取exchange 生成生產者
  }
)

conn.on('error', function(e) {
    console.log("Error from amqp: ", e);
});


有三種類型的Exchanges:direct, fanout,topic。 每個實現了不同的路由算法(routing algorithm)。
 Direct exchange: 如果 routing key 匹配, 那麼Message就會被傳遞到相應的queue中。其實在queue創建時,它會自動的以queue的名字作爲routing key來綁定那個exchange。
 Fanout exchange: 會向響應的queue廣播。

Topic exchange: 對key進行模式匹配,比如ab*可以傳遞到所有ab*的queue。

多個消費者可以訂閱同一個Queue,這時Queue中的消息會被平均分攤給多個消費者進行處理,而不是每個消費者都收到所有的消息並處理。

相關鏈接:  http://blog.csdn.net/rwb0123/article/details/68944755
https://github.com/postwait/node-amqp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章