原理图
术语介绍
- Broker:消息队列服务实体
- Exchange:交换机,通过特定的方法路由到指定的队列
- Queue:消息载体,每个消息都会被路由到一个或多个队列
- Binding:绑定,把Exchange和Queue按照路由规则绑定起来
- RoutingKey:路由的key,Exchange根据该值进行消息投递
- Vhost:一个Broker可以创建多个Vhost,用作不同用户的权限分离
- Producer:消息生产者
- Consumer:消息消费者
- Channel:消息通道,一个连接可以创建多个Channel,一个Channel代表一个会话任务
注意: Exchange和Queue在创建的时候默认为持久化
为什么选择RabbitMQ
- 实现类AMQP协议
- 可靠性,提供了持久化支持
- 高并发,采用了Erlang语言
- 集群部署简单
- 社区活跃度高
信道(channel)
生产者在往RabbitMQ服务发送消息之前,需要和RabbitMQ服务创建一个TCP连接,并进行安全认证,认证通过之后会创建一个信道
为什么要创建信道而不直接使用创建的TCP连接进行通信?
- 首先AMQP协议要求每条AMQP命令必须在信道中传输
- 如果使用TCP连接,那么在高峰时期就会创建成千上万个TCP连接,很可能达到操作系统创建TCP连接的瓶颈,并且TCP连接的创建和销毁的代价是很昂贵的(三次握手、四次挥手)
总结:所以会在创建一个TCP连接后,会在该连接的基础上创建一条一条的channel,这样既可以保证性能,也可以保证每个连接的私密性。