RabbitMQ入门

文章目录
  1. 1. 前言
  2. 2. RabbitMQ是什么
  3. 3. 安装
    1. 3.1. 安装erlang
    2. 3.2. 安装rabbitmq
    3. 3.3. 开启web访问
    4. 3.4. 访问测试
  4. 4. 核心概念
  5. 5. 三种ExchangeType
    1. 5.1. direct交换器
    2. 5.2. fanout交换器
    3. 5.3. topic交换器
  6. 6. routing key绑定
  7. 7. 参考资料

前言

刚开始接触RabbitMQ的时候,有些概念那理解起来简直是像风像雨又像雾,晦涩难懂。 这篇文章用尽可能浅显的语言来解释RabbitMQ的入门知识。毕竟是入门课程,并没有对很多概念进行深入说明,如果你想更深入的了解RabbitMQ,可以继续关注本头条号后续发布的文章或者自己从网上搜寻了资料,自己探索研究。

RabbitMQ是什么

官方定义:RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将要发送的消息放入到队列池中。接收端可以根据RabbitMQ配置的转发机制接收服务端发来的消息。RabbitMQ依据指定的转发规则进行消息的转发、缓冲和持久化操作,主要用在多服务器间或单服务器的子系统间进行通信,是分布式系统标准的配置。 趣味定义:兔子行动非常迅速而且繁殖起来也非常疯狂,用Rabbit来命名这个分布式软件,呼应了RabbitMQ的主要任务是处理海量的信息

安装

安装erlang

下载地址:http://erlang.org/download/otp_win64_21.0.1.exe

安装rabbitmq

下载地址:https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7.exe
如果你要安装其它版本,注意版本对应:https://www.rabbitmq.com/which-erlang.html

开启web访问

Windows下:打开CMD 进入rabbitmq的安装目录 执行rabbitmq-plugins enable rabbitmq_management命令.
该命令,仅在首次运行RMQ时使用!!!目的就是加载Web插件!!!

访问测试

测试地址 http://localhost:15672/

默认用户名:guest 默认密码:guest

核心概念

> https://content.pivotal.io/rabbitmq/understanding-when-to-use-rabbitmq-or-apache-kafka


RabbitMQ broker: 原话是RabbitMQ isn’t a food truck, it’s a delivery service,其实说白了,就是一种传输服务。
Exchange: 接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为。在RabbitMQ中,ExchangeType常用的有direct、Fanout和Topic三种,在第三部分会详细介绍。
Message Queue: 消息队列。我们发送给RabbitMQ的消息最后都会到达各种queue,并且存储在其中(如果路由找不到相应的queue则数据会丢失),等待消费者来取。
Binding Key:它表示的是Exchange与Message Queue是通过binding key进行联系的,这个关系是固定的,初始化的时候,我们就会建立该队列。
Routing Key:生产者在将消息发送给Exchange的时候,一般会指定一个routing key,来指定这个消息的路由规则。这个routing key需要与Exchange Type及binding key联合使用才能生,我们的生产者只需要通过指定routing key来决定消息流向哪里。

我的注释:初始化的时候,exchange与各个队列的绑定关系是通过binding key进行绑定的;发送消息的时候,使用的routing key就是binding key的某一个(实质,两者是一个含义,角度不同,名称含义不同) 对于消费端来说,只用知道MQ的virtual host 和queue的名称就可以了。而对于发送端,则需要知道exchange和routing key的名称,相对而言queue的名称就不那么重要了(不过也要依Exchange Type而定)。
以下是RabbitMQ最简单的流程图,相信看到这里的你,对MQ的运作流程应该会有个基本的了解了:

三种ExchangeType

> http://www.rabbitmq.com/tutorials/amqp-concepts.html
> 这里介绍三种最主要的类型的exchange:direct、fanout和topic。

direct交换器

Direct交换器很简单,如果是Direct类型,就会将消息中的RoutingKey与该Exchange关联的所有Binding中的BindingKey进行比较,如果相等,则发送到该Binding对应的Queue中。有一个需要注意的地方:如果找不到指定的exchange,就会报错。但routing key找不到的话,不会报错,这条消息会直接丢失,所以此处要小心。

fanout交换器

Fanout 扇出,顾名思义,就是像风扇吹面粉一样,吹得到处都是。如果使用fanout类型的exchange,那么routing key就不重要了。因为凡是绑定到这个exchange的queue,都会受到消息。

topic交换器

  • direct是将消息放到exchange绑定的一个queue里(一对一);
  • fanout是将消息放到exchange绑定的所有queue里(一对所有) 那可不可以把消息放到exchange绑定的一部分queue里,或者多个routing key可以路由到一个queue里呢?
  • topic类型的exchange就可以实现(一对部分)。
  • topic应用场景:打印不同级别的错误日志 例如,我们的系统出错后会根据不同的错误级别生成error_levelX.log日志,我们在后台首先要把所有的error保存在一个总的queue(绑定了一个*.error的路由键)里,然后再按level分别存放在不同的queue。

routing key绑定

参考资料

-RabbitMQ 入门秘籍,三分钟带你快速了解RabbitMQ