1 消息中间件概述
1.1 概念
维基百科对消息中间件的解释:面向消息的系统(消息中间件)是在分布式系统中完成消息的发送和接收的基础软件。
消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通 过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。
异步处理、流量削峰、限流、缓冲、排队、最终一致性、消息驱动等需求的场景都可以使用消息中间件。
1.2 自定义消息中间件
1.3 主流消息中间件及选型
当前业界比较流行的开源消息中间件包括:ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等,其中应用最为广泛的要数RabbitMQ、RocketMQ、Kafka这三款
1.4 消息中间件应用场景
消息中间件的使用场景非常广泛,比如,12306购票的排队锁座,电商秒杀,大数据实时计算等。
1.5 AMQP协议剖析
1.5.1 协议架构
1.5.2 AMQP中的概念
1.5.3 AMQP 传输层架构
2 RabbitMQ架构
2.1 RabbitMQ介绍、概念、基本架构
2.1.1 RabbitMQ Exchange类型
RabbitMQ常用的交换器类型有: fanout 、 direct 、 topic 、 headers 四种。
Fanout
会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中,如图:
Direct
direct类型的交换器路由规则很简单,它会把消息路由到那些BindingKey和RoutingKey完全匹配的队列中,如下图:
Topic
topic类型的交换器在direct匹配规则上进行了扩展,也是将消息路由到BindingKey和RoutingKey相匹配的队列中,这里的匹配规则稍微不同,它约定:
BindingKey和RoutingKey一样都是由"."分隔的字符串;BindingKey中可以存在两种特殊字符“”和“#”,用于模糊匹配,其中"“用于匹配一个单词,”#"用于匹配多个单词(可以是0个)
Headers
headers类型的交换器不依赖于路由键的匹配规则来路由信息,而是根据发送的消息内容中的headers属性进行匹配。在绑定队列和交换器时指定一组键值对,当发送的消息到交换器时,
RabbitMQ会获取到该消息的headers,对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果匹配,消息就会路由到该队列。headers类型的交换器性能很差,不实用。
2.2 RabbitMQ数据存储
2.3 RabbitMQ工作流程详解
2.3.1 生产者发送消息的流程
2.3.2 消费者接收消息的过程
2.4 Connection 和Channel关系
2.5 RabbitMQ工作模式详解
2.5.1 Work Queue
2.5.2 发布订阅模式
使用fanout类型交换器,routingKey忽略。每个消费者定义生成一个队列并绑定到同一个Exchange,每个消费者都可以消费到完整的消息。
消息广播给所有订阅该消息的消费者。
2.5.3 路由模式
2.5.4 direct交换器
分布式系统中有很多应用,这些应用需要运维平台的监控,其中一个重要的信息就是服务器的日志记录。
我们需要将不同日志级别的日志记录交给不同的应用处理。如何解决?
多重绑定
2.5.5 主题模式
3 RabbitMQ高级特性解析
3.1 消息可靠性
3.2 TTL机制
3.3 死信队列
3.4 延迟队列
延迟消息是指的消息发送出去后并不想立即就被消费,而是需要等(指定的)一段时间后才触发消费。
4 RabbitMQ集群与运维
4.1 RabbitMQ分布式架构模式