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:123456@127.0.0.1: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:123456@127.0.0.1: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