RabbitMQ系列(一)

涉及入门、原理、实战、分布式事务实现等方面

一、基本概述

RabbitMQ是基于Erlang语言开发的(erlang主要用于交换机而开发的语言)

1、rabbitmq为什么性能比较高?其主要原因是其基于erlang语言进行开发的:

RabbitMQ系列(一)

现在的很多大厂都在使用rabbitmq(饿了么、美团、大众点评等)

2、AMQP协议:

RabbitMQ系列(一)

下面是关于AMQP协议的详细架构:
RabbitMQ系列(一)

对于上面架构的简单说明:

RabbitMQ系列(一)         RabbitMQ系列(一)

RabbitMQ系列(一)       RabbitMQ系列(一)

注意:一般是要Routing key和Binding一致,这样交换机才能根据每个消息的路由键和Binding对比后放入相应的队列中,然后消费者通过监听某个队列进行消息接收

上面中最核心的部分就是交换机Exchaange。

RabbitMQ系列(一)

3、交换机Exchange

Exchange的作用:

RabbitMQ系列(一)

3.1、Direct类型(直接路由routing key=binding key):

即当路由键和binding一致时,交换机会根据一致的routing key:binding key 进行对应的消息分发。下图即交换机将routing key=binding key=naicha这个消息进行分发的过程。

此时如果没有对应的binding,该消息就会被丢弃。
RabbitMQ系列(一)

3.2、Fanout 类型(广播路由,Fan是扇子的意思,这个名字就很形象,就是扇形广播的类型)

这个模式中不需要binding的概念,此时不管是哪个队列,该交换机拿到一个消息后,每个队列都会发送该消息。

RabbitMQ系列(一)

3.3、Topic类型(主题/话题路由,最复杂的一种类型)

 主要有下面三种情况:全匹配、含#、含*。这三种情况根据不同的规则和routing key进行匹配,匹配的上就将消息发放给相应的队列。 

RabbitMQ系列(一)

例如下图:

RabbitMQ系列(一)      RabbitMQ系列(一)

RabbitMQ系列(一)

如果想自己试下怎么分配的,可以去http://tryrabbitmq.com/这个网站看看。

RabbitMQ系列(一)

所以你基本可以不用到direct路由了,因为可以说Topic就包含了Direct路由(全匹配模式routing key=binding key),所以一般在实际使用中,如果非广播类型(Fanout)的就直接用Topic类型

还有交换机类型还有一个headers类型的,只是基本都不会用而已。

二、安装RabbitMQ(docker)

这里可以使用单机或者集群。

1、单机模式

看:https://www.cnblogs.com/frank-zhang/p/13523926.html

安装后访问http://192.168.211.20:15672      (上面的教程中是设置了自己的一个用户名密码:admin:admin。如果没设置则默认都是guest)

2、集群部署

三、RabbitMQ管理台界面说明

进入管理台界面后:

RabbitMQ系列(一)

1、Overview(概述)

其中有以下几个功能:

RabbitMQ系列(一)

1.1、totals

RabbitMQ系列(一)

1.2、Nodes

RabbitMQ系列(一)

1.3、Churn statistics

RabbitMQ系列(一)

1.4、Ports and contexts

RabbitMQ系列(一)

1.5、Export denfinittions  和 Import definitions都是对于该MQ的一些设置(后面可能会对该MQ进行队列、交换机等的设置)的导入导出功能

2、Connections

RabbitMQ系列(一)

3、Channels(Connections中的逻辑通道)

RabbitMQ系列(一)

4、Exchange

RabbitMQ系列(一)

添加一个交换机test:

RabbitMQ系列(一)

点进去test交换机

RabbitMQ系列(一)

在交换机中绑定一个队列。所以我们此时要进去Queues中创建一个队列

5、Queues

RabbitMQ系列(一)

进入看看队列详情:

RabbitMQ系列(一)

6、Admin

RabbitMQ系列(一)

你可以自己点进去各个管理看看怎么回事。这里就不再说明

7、我们如何在客户端中建立一个队列、交换机进行绑定?

先建立一个test交换机:
RabbitMQ系列(一)

再建立一个队列testQue:

RabbitMQ系列(一)

进入交换机中进行队列的绑定:

RabbitMQ系列(一)

这样就完成了交换机和队列的绑定了。

RabbitMQ系列(一)

上面是对于控制台的简单说明,当然除了控制台ui操作,你也可以1用命令行的形式去查看MQ的信息,这里不做说明,自己去网上搜一搜。

下一篇讲RabbitMQ的使用(包含入门+高级特性)