RabbitMQ 1 分布式消息中间件 MQ选用 RabbitMQ特点,流程,名词介绍

分布式消息中间件
ActiveMQ
RabbitMQ
- 在AMQP基础上完成
- 优点:
- 基于erlang语言,高并发特性
- 吞吐量万级
- MQ功能完善
- 支持多种编程语言
- 开源管理界面完善
- 社区活跃度高
- 缺点
- 商业版收费
- 学习成本高
Kafka
- 优点:性能很强,单机写入TPS约百万条/s。
- 缺点:
- 在单机超过64队列/分区,Load会发生明显的飙高现象。队列越多,load越高,发送响应时间变长;
- 一台宕机,就会产生消息乱序。
- 消费失败不支持重试
RocketMQ
- 阿里、滴滴开发的国产分布式消息中间件
- 优点:
- 单机吞吐量十万级,
- 消息可以做到0丢失,
- 支持分布式,扩展性好。
- 支持10亿级别消息堆积;
- 支持自定义
- 缺点:
- 支持的客户端不多。
MQ区别/MQ选用
ActiveMQ | RabbitMQ | Kafka | RocketMQ | |
---|---|---|---|---|
发布订阅 | 支持 | 支持 | 支持 | 支持 |
轮询分发 | 支持 | 支持 | 支持 | / |
公平分发 | / | 支持 | 支持 | / |
重发 | 支持 | 支持 | / | 支持 |
消息拉取 | / | 支持 | 支持 | 支持 |
- Kafuka
- 基于Pull模式处理消息消费,追求高吞吐量
- 适用于大量数据的互联网服务的数据收集业务
- 场景:日志采集
- 适合大型公司
- RocketMQ
- 适用于可靠性要求较高的场景。
- 场景:金融互联网。
- 在阿里双11经历多次考验。
- RabbitMQ
- 结合erlang语言并发优势,时效性微秒级,社区活跃度高;
- 使用方便
- 场景:消息量不是那么大的场景
- 适合中小型公司。
RabbitMQ
负责数据存储与转发。
特点
- 削峰:将访问的人员进行排队,
- 若一个时间段有20000个请求,而服务器同时只能接收100个请求,RabbitMQ负责将大请求进行排队,依次进入服务器进行处理。
- 应用解耦
- 在一次订单过程中,订单需要经过:订单系统,库存系统,物流系统,支付系统等几个过程。若其中有任意一个出现问题,订单会执行失败。
- 为解决问题,RabbitMQ可以进行解耦。解耦后,任意一个系统出现问题,消息会被缓存到消息队列中,直到系统被修复,这样可以避免整个过程重新执行。
- 提升可用性
- 异步处理
- 若A要调用B且需要B的返回结果,若B需要很长时间,A需要等待B,这个效率很低;
- 若MQ出现后,A只需要将消息交给MQ即可,当B完成后,将结果交给MQ,MQ将消息通知给A即可。
原理
RabbitMQ使用的是基于tcp/ip的amqp协议
- amqp,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议。
流程
- 生产者
- MQ
- 交换机
- 交换机绑定队列
- 队列
- 队列绑定消费者
- 交换机
- 消费者
名词介绍
Broker:接收和分发消息的应用。RabbitMQ Server就是一个Broker
Server:又称Broker,接收客户端的连接,实现AMQP的实体服务;
Connection:连接,应用程序与Broker的TCP/IP连接。
Channel:网络信道,几乎所有的操作都在Channel中进行,Channel进行消息读写的通道,客户端可以建立多个Channel,每个Channel代表一个会话任务;
- 如果每一次访问创建一个Connection,会建立大量的TCP连接,Connection的开销是巨大的,效率也低。Channel是在Connection内部建立的逻辑连接,若应用程序支持多线程,通常每个thread创建单独的channel进行通讯。
- AMQP报文包含了Channel Id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。
Message:消息,服务器与应用程序之间传送的数据,由Properties和Body组成,
- Properties对消息进行修饰,比如消息的优先级,延迟等高级特性,
- Body是消息体的内容;
Virtual Host:虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机里可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名字的Exchange;
Exchange:交换机,接收消息,根据分发规则,匹配Routing Key发送消息到绑定的队列(不具备消息存储能力)。
- 常用类型:direct(point-to-point),topic(publish-subscribe)和fanout(multicast)
- direct:匹配路由键,只有完全匹配,消息才会被转发
- fanout:将消息发送至所有的队列
- topic:将路由进行模式匹配
#
匹配一个或多个词"
匹配不多不少一个词
- 常用类型:direct(point-to-point),topic(publish-subscribe)和fanout(multicast)
Bindings:Exchange与Queue之间的虚拟连接,Binding中可以保护多个routing key。
Routing key:生产者将消息发送到交换机时会携带一个key,来制定路由规则;
Queue:队列,也称为Message Queue消息队列,保存消息并将它们转发给消费者。
使用场景
- 分布式事务可靠消息的可靠生产
- 索引、缓存、静态化处理的数据同步
- 流量监控
- 日志监控(ELK)
- 下单,订单分发,抢票。
RabbitMQ 1 分布式消息中间件 MQ选用 RabbitMQ特点,流程,名词介绍
2023/02/23/RabbitMQ/RabbitMQ-1_v2/
评论