RabbitMQ 中名词的个人理解

Apr 1, 2017 21:46 · 684 words · 2 minutes read

首次听到RabbitMQ这个东西是一个同事要使用这玩意儿来做java后端中的异步消息通讯,当时他说这是一个基本不会丢消息的消息队列,我就想,哪有这么牛,这年头什么是丢不了的呢。

但其实也没有多厉害,这个队列可以把消息持久化,也就是说,消息不仅仅存储在内存中,通过一个选项durable,可以让消息同时存储在服务器硬盘中,这样即使服务器宕机了,重启后依然可以将队列中未被消费的消息提取出来继续工作。硬盘挂了不久啥也没了么,呵呵。

Connection:

连接,每个客户端可以建立一个连接,也许可以多个,一般默认是使用AMQP协议进行通讯

Exchange

交换区,相当于消息集中营,就像论坛中大的版块,RabbitMQ中可以允许建立多个这样的版块,而每个版块都可以有自己的属性,例如,topic|direct。 同样的,版块可以设置各种属性,例如客户端断开连接后自动清除以及消息的有效时间等

Queue

队列,这个相当于论坛中的用户,每个用户都在排队等待某些消息,当然也可以多个用户同时排在一个队列中,但是这的队列并不是顺序队列,也就是说队列中的身份是对等的,而不是按顺序。

Routing Key

这个相当于论坛的帖子,比如我关注了某个帖子,那么这个帖子中发出的新的回复,每个关注这个帖子的所有用户都可以看到这些回复,正如上面说的,每个人都可以对楼层进行回复,而不是排队进行回复,这里的回复就是消息的消费了。当然,如果有个用户回复说,后面来的就不要回复了,那么这个楼层在某种意义上就没必要回复了。这个相当于用户发送了ack,即消息确认。而如果有个用户正在进行回复,那么此时他相对来说较忙了,那么其他人就可以得到优先回复楼层的特权了,也就是消息平均分配给了其他消费者