简介
RabbitMQ是一套基于AMQP协议使用erlang语言开发的消息队列。
下面首先来介绍一下AMQP协议
以上这段文字来源于维基百科。要注意其中的两点一个是与JMS的不同。 还有一点就是消息是作为字节流进行传递,而这个协议是规定了字节流内容的格式。
这个图是关于AMQP协议的, 一个服务端,里面是有多Virtuual host可以理解为数据库。Exchange 就是一个交换机(路由。相当于现实生活中的看门人,根据规则将消息放到一个queue中) queue 队列 就是我们最终放数据的地方了。
AMQP的相关概念
- server: 又称为broker,接收服务端连接。
- Connection: 建立连接,应用程序与broker的网络连接。
- Channel: 网络信道,几乎所有的操作都要在channel。channel是进行消息读写的通道。客户端可建立多个channel,就有点类似于数据库的session一样。在使用数据库的时候也是先建立连接,在通过连接去建立session。channel就是一个会话。
- Message: 消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体的内容。
- Virtual host: 虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host是里面可以有多个exchange和Queue。同一个Virtual host里面不能有相同名称的exchange或者 queue。
- exchange:交换机,接收消息,根据路由键转发消息到绑定的队列。
- Binding:exchange和queue进行绑定。绑定其中就是建立一个路由规则。
- Routing key:一个路由规则,交换机就是根据这个路由规则来确定将消息放置到哪个一个queue中。
- Queue: 消息队列,保存消息并且可以将消息转发。
下面是一个流程图
根据这个图我们可以知道,一个virtual host 会有多个交换机,而同一个交换机可以和多个queue绑定,同一个消息可以同时发送到一个队列或者 多个队列中。最后在由队列将消息转发到消费者。
可以根据下面这个图来理解
关于rabbitMQ的特别,我个人感觉就是快(使用了erlang语言开发),并具有良好的集群模型和可靠性(这两点以后的文章会介绍)。 我比较喜欢RabbitMQ还有一个重要的原因就是他的管理界面比较友好。 到于和其他的消息队列的对比,我感觉各有千秋吧。可以看下面的两篇文章,总结起来就是如果没有特别要求RabbitMQ满足你的绝大多数需求(你要是天猫双十一的就当我没有说)。对比文章 对比文章
以上是关于AMQP协议相关概念的介绍。