3

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服务器,初始化用户名和密码是guestguest
    图片描述

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还有一些复杂东西,我们将会在后面的文章中一一介绍。


qeesung
785 声望374 粉丝

做了过河卒子,只能拼命向前