RabbitMQ系列(一)
涉及入门、原理、实战、分布式事务实现等方面
一、基本概述
RabbitMQ是基于Erlang语言开发的(erlang主要用于交换机而开发的语言)
1、rabbitmq为什么性能比较高?其主要原因是其基于erlang语言进行开发的:
现在的很多大厂都在使用rabbitmq(饿了么、美团、大众点评等)
2、AMQP协议:
下面是关于AMQP协议的详细架构:
对于上面架构的简单说明:
注意:一般是要Routing key和Binding一致,这样交换机才能根据每个消息的路由键和Binding对比后放入相应的队列中,然后消费者通过监听某个队列进行消息接收
上面中最核心的部分就是交换机Exchaange。
3、交换机Exchange
Exchange的作用:
3.1、Direct类型(直接路由routing key=binding key):
即当路由键和binding一致时,交换机会根据一致的routing key:binding key 进行对应的消息分发。下图即交换机将routing key=binding key=naicha这个消息进行分发的过程。
此时如果没有对应的binding,该消息就会被丢弃。
3.2、Fanout 类型(广播路由,Fan是扇子的意思,这个名字就很形象,就是扇形广播的类型)
这个模式中不需要binding的概念,此时不管是哪个队列,该交换机拿到一个消息后,每个队列都会发送该消息。
3.3、Topic类型(主题/话题路由,最复杂的一种类型)
主要有下面三种情况:全匹配、含#、含*。这三种情况根据不同的规则和routing key进行匹配,匹配的上就将消息发放给相应的队列。
例如下图:
如果想自己试下怎么分配的,可以去http://tryrabbitmq.com/这个网站看看。
所以你基本可以不用到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管理台界面说明
进入管理台界面后:
1、Overview(概述)
其中有以下几个功能:
1.1、totals
1.2、Nodes
1.3、Churn statistics
1.4、Ports and contexts
1.5、Export denfinittions 和 Import definitions都是对于该MQ的一些设置(后面可能会对该MQ进行队列、交换机等的设置)的导入导出功能
2、Connections
3、Channels(Connections中的逻辑通道)
4、Exchange
、
添加一个交换机test:
点进去test交换机
在交换机中绑定一个队列。所以我们此时要进去Queues中创建一个队列
5、Queues
进入看看队列详情:
6、Admin
你可以自己点进去各个管理看看怎么回事。这里就不再说明
7、我们如何在客户端中建立一个队列、交换机进行绑定?
先建立一个test交换机:
再建立一个队列testQue:
进入交换机中进行队列的绑定:
这样就完成了交换机和队列的绑定了。
上面是对于控制台的简单说明,当然除了控制台ui操作,你也可以1用命令行的形式去查看MQ的信息,这里不做说明,自己去网上搜一搜。
下一篇讲RabbitMQ的使用(包含入门+高级特性)