RabbitMQ 基础教程(1) - Hello World
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。
如果你喜欢我的文章,可以关注我的私人博客:http://blog-qeesung.rhcloud.com/
RabbitMQ
是一个message broker
,消息的生产者(producer)
负责生产消息,然后将消息传入传入queue(消息队列)
,消费者(consumer)
从消息队列中取出消息进行处理。
简单来说,消息队列就像邮局一样,我们将信封(消息)投递到邮局的信筒,然后信差根据信封上面的地址将信封投递到对应的地址(消费者)。
如下所示:
queue
+---------------+ +--+--+--+--+--+--+--+ +---------------+
| producer |-----> |m1|m2| ... | | | |------>| consumer |
+---------------+ +--+--+--+--+--+--+--+ +---------------+
安装RabbitMQ
RabbitMQ
是基于Erlang
来开发的,首先安装Erlang
的运行环境
安装Erlang
Erlang官网下载并安装
安装RabbitMQ
RabbitMQ官网下载并安装
配置RabbitMQ
博主其实也是RabbitMQ
小白,命令行工具不太熟悉,庆幸的是RabbitMQ
为我们提供web配置页面,但是要进行一些简单的配置。
打开
RabbitMQ Command Prompt
或 直接通过cmd
进入到RabbitMQ Server
的安装目录下的rabbitmq_server-*/sbin
路径执行下面的命令:
rabbitmq-plugins.bat enable rabbitmq_management
rabbitmq-service.bat stop
rabbitmq-service.bat install
rabbitmq-service.bat start
最后在http://localhost:15672/就可以访问
RabbitMQ
为我们搭建起来的Web服务器,初始化用户名和密码是guest
和guest
Hello World 例子
RabbitMQ
支持多种语言,包括Python
,PHP
,nodejs
等等,我们这里的例子就采用Nodejs
。
安装RabbitMQ
库
npm install amqplib
这里我们首先将消息推入队列,然后消费者从队列中去除消息进行消费。
生产消息
var amqp = require('amqplib/callback_api');
// 连接上RabbitMQ服务器
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
// 声明队列,然后将队列中的消息持久化取消
ch.assertQueue(q, {durable: false});
// 将字符串存入Buffer中,并推入队列
ch.sendToQueue(q, new Buffer('Hello World!'));
console.log(" [x] Sent 'Hello World!'");
});
});
/**
$ node rabbit-producer.js
[x] Sent 'Hello World!'
*/
现在消息已经发送到RabbitMQ
的队列中
消费消息
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
// 声明已经存在的队列
ch.assertQueue(q, {durable: false});
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
// 监听队列上面的消息
ch.consume(q, function(msg) {
console.log(" [x] Received %s", msg.content.toString());
}, {noAck: true});
});
});
/**
$ node rabbit-consumer.js
[*] Waiting for messages in hello. To exit press CTRL+C
[x] Received Hello World!
*/
在本文中知识介绍了RabbitMQ
的一些基础知识,RabbitMQ
还有一些复杂东西,我们将会在后面的文章中一一介绍。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。