RabbitMQ:
使用场景:
异步通信、顺序消费、定时任务、请求削峰
核心组件:
1、Broker
(消息队列服务器实体)
2、Exchange
(消息交换机)
3、Queue
(消息队列载体)
4、Binding
(绑定,把Exchange和Queue按照路由规则绑定)
5、Routing Key
(路由关键字,Exchange根据关键字进行消息投递)
6、V Host
(虚拟的Broker,为TCP虚拟连接,可以有多个。 Mini-RabbitMQ Server,有独立的2、3、4)v host 可以作为不同权限隔离的手段
7、Producer
(消息生产者):同步,异步,单向
8、Consumer
(消息消费者)
9、Channel
(消息通道,客户端的每个连接李,可建立多个channel,每个代表一个回话任务)
由Exchange、Queue、RoutingKey三个才能决定一个从Exchange到Queue的唯一的线路。
RabbitMQ工作模式:
1、Simple(收发模式):
Producer产生消息放入队列,Consumer监听并消费,需要设置手动ack防止消息丢失,但需要注意及时发送ack,否则会造成内存溢出。
2、Work(资源竞争):
Producer产生消息放入队列,多个Consumer监听并消费,先到先得。需要设置一个开关(Syncronize)保证一对一。否则会一个被多用。
3、Publish/subscribe发布订阅(共享资源):
Consumer监听自己的队列,生产消息给broke,由Exchange转发到绑定此交换机的每个队列,都能接收到消息
4、routing路由模式:
Producer将消息发送给Producer,Producer根据Routing key有选择的转发消息到匹配的queue
5、topic主体模式(路由模式的一种):
添加了模糊匹配(通配符*(多个)、#(单个))
如何保证RabbitMQ消息的顺序性
1、拆分多个queue,每个queue一个consumer,多个queue,麻烦
2、就一个queue对应一个consumer,在consumer内部用内存队列做排队,分发给底层不同的worker处理
消息的分发机制:
1、默认轮询,当出现处理速度快慢不一致时,会出现处理速度快的空闲状态。
2、不公平分发,能者多劳
3、预值分发,预值满时停止发送,除非ack确认后。
消息怎么路由:
消息提供方→路由→一个或多个消息发布到交换器时,消息拥有一个路由键,在消息创建时设定。通过队列路由键,可以把队列绑定到交换器上。消息到达交换器后,
RabbitMQ 会将消息的路由键与队列的路由键进行匹配(针对不同的交换器有不同的路由规则)
消息路由:
1、Fanout:收到消息,广播到所有绑定的队列上
2、Direct:路由键完全匹配,投递到相应的队列上
3、Topic:不同来源到同一个队列,支持通配符
消息持久化:
消息发送之前写入磁盘上的持久化日志文件中,消费后把消息标记为等待垃圾收集状态,如果被消费之前重启,将自动重建交换器和队列,重新发布日志文件中的消息
消息基于什么传输:
使用信道的方式传输数据,信道建立在真实的TCP连接内的虚拟连接,且每条TCP连接上的信道数量没有限制 TCP方式开销大,且并发数受系统资源限制,会造成性能瓶颈。