头一次写文章,有写的不好或者写的不对的欢迎批评指正!谢谢!
一、安装
erlang
1.下载erlang
2.点击下载(windows)
3.点击安装
注意 保存在自己想要放在的路径下
配置环境变量
ERLANG_HOME
D:\program\erl-24.3
cmd运行查看是否正确
下载RabbitMQ
1.打开链接
2.向下滑动,点击下载
3.安装,找到自己想要放到的目录
4.进入sbin目录
rabbitmq-plugins enable rabbitmq_management
5.输入 rabbitmqctl status(在sbin目录下输入) , 如果出现以下的图,说明安装是成功的,并且说明现在RabbitMQ
6.进入页面(默认localhost:15672)
用户名和密码都是guest
二、RabbitMQ简介
定义
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。(来自百度百科)
常用概念和术语
- 生产者:发送消息客户端
- 消费者:接收消息服务端
- 队列(queue):存储消息的地方,本质是一个大的消费缓冲区,生产者把消息发送到此队列,消费者尝试从这个队列中接收数据
- 信道(channel):大部分用于完成任务的API都在此通道实现
三、Hello World
参考链接 RabbitMQ是一个消息代理,负责接收和转发消息。你可以把它想象成一个邮局:当你把你想要投寄的邮件放进一个邮箱时,你可以确定邮递员最终会把邮件送到你的收件人那里。在这个类比中,RabbitMQ是一个邮箱、一个邮局和一个邮递员。
RabbitMQ和邮局的主要区别是,它不处理纸张,而是接受、存储和转发二进制数据——消息。
1.安装模块
npm install amqplib #安装amqp.node 客户端
2.编写send.js发送端(官方代码)
//1.In send.js, we need to require the library first 首先,引入amqplib模块
var amqp = require('amqplib/callback_api');
//2.then connect to RabbitMQ server 连接到RabbitMQ服务器
amqp.connect('amqp://localhost', function(error0, connection) {
if (error0) {
throw error0;
}
//Next we create a channel, which is where most of the API for getting things done resides:
//接下来我们创建个信道,大部分用于完成任务的API都在此通道实现
connection.createChannel(function(error1, channel) {
if (error1) {
throw error1;
}
//To send, we must declare a queue for us to send to; then we can publish a message to the queue
//要发送,我们必须要声明一个队列,然后我们可以将消息发布到队列中
var queue = 'hello';
//要发送的消息
var msg = 'Hello World!';
// This makes sure the queue is declared before attempting to consume from it
//确保队列消费之前被声明
channel.assertQueue(queue, {
durable: false
});
channel.sendToQueue(queue, Buffer.from(msg));
console.log(" [x] Sent %s", msg);
});
//Declaring a queue is idempotent - it will only be created if it doesn't exist already. The message content is a byte array, so you can encode whatever you like there.
//声明一个队列是幂等的 - 只有当它不存在时才会创建它。消息内容是一个字节数组,因此您可以在那里编码任何您喜欢的内容。
setTimeout(function() {
connection.close();
process.exit(0);
}, 500);
});
—穿插一个字符串、对象或者数组转换成buffer数据
var user = {
name: 12,
age: 10,
gender: 1
}
//对象转换成Buffer
var buf = Buffer.from(JSON.stringify(user), 'utf8');
console.log(buf)
//Buffer转换成对象
var s = JSON.parse(buf.toString('utf8'));
console.log(s)
console.log(typeof s)
//num转换
var num = 1;
var buf2 = Buffer.from(JSON.stringify(num), 'utf8');
console.log(buf2)
var s2 = JSON.parse(buf2.toString('utf8'));
console.log(s2)
//数组转换
var nums = [1, 2, 3, 4, 5];
var buf3 = Buffer.from(JSON.stringify(nums), 'utf8');
console.log(buf3)
var s3 = JSON.parse(buf3.toString('utf8'));
console.log(s3)
var user2 = {
name: 12,
age: 10,
gender: 1,
nums: [1, 2, 3, 4, 5],
info:{
className:'二班',
grade:'三年级'
}
}
var buf4 = Buffer.from(JSON.stringify(user2), 'utf8');
console.log(buf4)
var s4 = JSON.parse(buf4.toString('utf8'));
console.log(s4)
console.log(typeof s4)
结果如下
3.接收方(官方代码)
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(error0, connection) {
if (error0) {
throw error0;
}
connection.createChannel(function(error1, channel) {
if (error1) {
throw error1;
}
var queue = 'hello';
channel.assertQueue(queue, {
durable: false
});
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue);
channel.consume(queue, function(msg) {
console.log(" [x] Received %s", msg.content.toString());
//channel.ack(msg);
}, {
//表示自动提交,如果不自动提交 则要手动ack数据 channel.ack(msg);
noAck: true
//noAck:false channel.ack(msg); --配套使用写在consume的函数里面
});
});
});
4.运行
查看rabbitMQ心跳
1.点击connections
2.点击name
3.查看心跳详情