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

猜你喜欢

转载自blog.csdn.net/dongmelon/article/details/78404803
今日推荐