Channel信道
在《RabbitMQ实战》中是这么说的,你要跟服务进行网络通信,要打开一条TCP连接,但是,如果跟消息队列之间每次发送、接收消息,都通过打开、关闭TCP连接来实现的话,要是每秒成百上千条那就太浪费资源了(而且操作系统也只能建立这个数量的连接,数据量更大了怎么办呢),所以他们构建了一种虚拟的连接--信道。信道是基于TCP连接的,每个信道有独立的ID,简单理解来说就是,TCP连接好比光缆,而信道就是无数的通信连接,这样一个TCP连接就够了,而且信道可以无上限使用。
Queue队列
队列就好比是RabbitMQ服务器中有一个个的小盒子,生产者发送的信息存放在这些小盒子中,消费者接收的消息也需要从这些小盒子中取
Routing Key路由键
当你指明了消息要放到哪个队列时,就好比在每个消息上都要贴个标签,这个标签是用来标识这个消息要放到什么样的盒子中,这就是路由键
Binding绑定
绑定是在队列和交换器间设定的一个关联,类似于添加了一个路由规则,交换器在分发时会参考该规则进行分发
Exchange交换器
生产者生产了消息,要放到相应的盒子中,不可能让生产者自己一个个去放,RabbitMQ提供了交换器,专门负责分发信息的模块,不同的交换器分发的方式不一样
- direct:默认的交换器,队列名即为路由键,分发规则为路由键匹配了就直接放入队列,比如现有个消息要指明了放到香蕉队列,那它的路由键即是香蕉,好比标签上写了香蕉,就会直接放到香蕉盒里;指明了草莓,就放到草莓盒里
- fanout:具有类似广播功能的交换器,该交换器可以对多个队列进行绑定,在收到消息时,可以将同一个消息广播到这些绑定的队列中(路由键在该类型交换器上不起作用),然后你就可以根据需求在一个操作上对应去做多个不同的逻辑,而且还很方便的还可以进行扩展(在交换器上新增队列绑定即可)
- topic:topic交换器可以按照绑定规则让来自不同源头的消息到达相应的队列。使用方式来说就是,假设现在有三个队列,分别Q1、Q2和Q3,在绑定到该交换器时设定的绑定规则分别是“*a.log”、"a.*"和"#",那么现在你发了三条消息M1(路由键是a.log)、M2(路由键是a.error)和M3(路由键几个号b.log)给topic交换器,那它们分发的结果就是Q1中有M1,Q2中有M1M2,Q3中有M1M2M3,原因就是topic交换器会按照队列的绑定规则对路由键进行匹配,*会进行特定位置的任意字符匹配,#则代表全字符匹配
- headers:headers交换器不太常用,与direct只有一点不一样,就是headers分发时不是匹配路由键,而是对消息的头信息进行匹配,而且性能还会差很多
Vhost虚拟主机
说虚拟主机,大家可能都能想到电脑上的虚拟机,Vhost与虚拟机的作用是很类似的,在RabbitMQ中,所有的交换器、绑定、队列都是在Vhost中运行的,默认就会有个“/”的虚拟主机,如果一个不够使用的话,你也可以添加更多的虚拟主机,然后在其中添加队列、绑定并使用,虚拟主机也可以灵活的按需开启或者关闭。要注意的是,虚拟主机之间是不互通的,不能把A中的绑定规则用在B中,而且每个虚拟主机都有自己的权限设置,可以设定用户的权限