最基础的知识
生产者、消费者、代理
- 生产者:消息的创建者,负责创建和推送数据到消息服务器
- 消费者:消息的接收方,用户处理数据和确认消息
- 代理:就是RabbitMQ本身,扮演“快递”的角色,本身不产生消息。
消息发送原理
应用不rabbit之间创建一个TCP连接,一旦tcp打开,并通过了认证(认证就是你试图连接Rabbit之前发送的Rabbit服务器的连接信息、用户名、密码);认证通过后,我们的应用会和Rabbit创建一条AMQP的信道(Channel)。
channel时创建在“真实”的tcp上的虚拟连接,AMQP命令都是通过信道发送出去的,每个channel的id唯一,不论是发布消息、订阅队列或者接受消息都是通过channel完成的。
对于操作系统来说创建和销毁TCP会话是非常昂贵的开销,假设高峰期每秒有成千上万条连接,每个连接都要创建一条TCP会话,这就造成了TCP连接的巨大浪费,而且操作系统每秒能创建的TCP也是有限的,因此很快就会遇到系统瓶颈。更多的channel介绍 【?扩展一下操作系统时怎么建立tcp的,以及tcp的上限时受到地层的哪些因素影响】
rabbit内部知识
有哪些重要的内部知识点
- connectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器
- channel(信道):消息推送使用的通道
- Exchange(交换器):用户接受,分配消息
- Queue(队列):用户存储生产者的消息
- RoutingKey(路由键):用户把生成者的数据分配到交换器上
- BindingKey(绑定键):用于把交换器的消息绑定到队列上
【?结合使用场景,把它们之间的关系完整化。比如发送与rabbitmq关系,消费与rabbitmq的关系】
消息持久化
首先rabbitMq的Exchange和Queue默认不会持久化【???我记得别的帖子上有见过,默认是放在内存中样子,需要仔细查阅相关资料】
持久化的几种方式:
- 投递消息的时候durable设置为true,消息持久化。【??durable的相关知识】
- 投递模式deliverMode设置(持久)【??投递模式有哪些】
- 消息已经到达持久化的交换器上;【??交换器的类型】
- 消息已经到达持久化的队列上;【??队列的类型】
消息持久化道硬盘上会降低服务器吞吐量
虚拟主机
mini版的RabbitMq,有自己的Exchange、Queue、绑定,拥有自己的权限。每个Rabbti能创建很多vhost
vhost特征
- RabbitMQ默认的vhost是“/”,开箱即用
- 不同vhost之间隔离的,之间无法通讯,不会冲突,实现了多层分离。【?分层原理是啥】
- 创建用户的时候必须指定vhost
浙公网安备 33010602011771号