RabbitMQ是一款基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的开源消息中间件,主要用于实现分布式系统中不同组件之间的异步通信。它通过消息队列实现生产者与消费者的解耦,提高系统的灵活性,可扩展性和容错性。 其核心重点如下: 1.核心架构
- 生产者(Producer):发送消息到RabbitMQ
- 交换机(Exchange):接收生产者消息,根据路由规则转发到对应队列
- 队列(Queue):存储消息,支持持久化,限流等特性
- 消费者(Consumer):从队列获取并处理消息
- 绑定(Binding):定义交换机与队列之间的关联及路由规则 2.交换机类型
-
Direct:精确度匹配路由键(Routing Key) -
Topic:支持通配符匹配路由键(*匹配一个单词,#匹配多个单词) -
Fanout:无视路由键,将消息广播到所有绑定的队列 -
Headers:根据消息头信息进行匹配
3.消息特性
-
持久化:通过设置消息,队列,交换机的持久化属性,确保消息不丢失 -
确认机制:生产者可以通过Publish Confirm机制来确认消息是否送达 -
消费确认:消费者处理完消息后发送ACK确认,确保消息被正确处理 -
优先级:支持消息优先级排序,高优先级消息优先被消费
4.高级特性
-
死信队列:处理无法被正常消费的消息(过期,拒收,队列满) -
延迟队列:实现消息的定时投递(基于死信机制或插件) -
消息幂等性:通过消息ID等机制避免重复消费 -
限流:控制消费者的消息处理速度,防止过载
5.应用场景:
- 异步通信:如订单创建后异步发送通知
- 服务解耦:降低微服务之间的直接依赖
- 流量削峰:应对秒杀等突发流量场景
- 日志收集:分布式系统的日志异步归集 RabbitMQ 以其轻量、可靠、灵活的特性,广泛应用于分布式系统中,帮助开发者构建高可用、可扩展的消息通信架构。
编辑分享
如何使用RabbitMQ实现延迟队列?
如何保证RabbitMQ消息的顺序性?
对比下RabbitMQ和Kafka