RabbitMQ概述,Rabbitmq是什么

Queue是什么

rabbitmq为了管理不同种类的消息 ,例如:订单消息和用户消息,那么我们就可以提供多个队列,生产者可以自定义消息队列的名称 ,并根据需要把消息投递到不同的queue中(每个queue为一个独立的进程)

Exchange是什么

有的producer发给一个queue,有的是发给多个queue,所以我们就需要一个消息路由分发策略 的组件,交换器Exchange,把它和queue绑定在一起,有一个类似正则表达式的字符串(bingingkey )用来声明绑定的关系,而这些在exchange里的路由方式和绑定关系我们称为元数据

交换机类型:

Direct Exchange:根据消息的路由键将消息发送到完全与之匹配的队列

Topic Exchange:根据消息的路由键和队列绑定时指定的通配符,将消息路由到一个或多个队列

Headers Exchange:根据headers来决定消息的路由

Fanout Exchange:将消息广播到与之绑定的所有队列

Default Exchange:默认交换机,消息会路由到与路由键名称相同的队列

Rabbitmq是什么

像这样一个 包含多个queue进程和exchange组件的消息队列就是所谓的rabbitmq,每一台服务器上的rabbitmq实例就代表一个Broker

Rabbitmq特性

延时队列,死信队列和优先级队列

延时队列

发出消息后希望过一段时间后才消费,rabbitmq通过安装rabbitmq_delayed_message_exchang插件来实现或者rabbitmq通过设置消息的TTL和配置死信队列来实现,消息过期后自动转移到死信队列

应用场景:

  • 订单超时自动取消
  • 用户注册后延迟发送欢迎邮件
  • 任务失败后的延迟重试
死信队列

消费消息是有可能失败的,失败可以进行重试,如果多次重试失败,rabbitmq会将消息放到一个专门的队列放到后面便于我们单独处理,

优先级队列

rabbitmq支持生产者在发送消息的时候为消息标上优先级,消费者总是消费优先级高的消息(高优消息)

Rabbitmq集群

普通集群模式

这个模式,每个rabbitmq都是一个完整的mq实例,都能进行读写,他们之间会互相同步exchange里的元数据,但不会同步queue数据。对于写操作,exchange中的数据会同步,queue中的数据不会同步,对于读操作,如果访问的是broker1中的queue1中的数据,那么会直接返回,如果访问的是broker2,那么会根据exchange2中的元数据去broker1中读取数据再返回给消费者

(单点问题,每个实例的读写能力并没有提升)

镜像队列集群

再普通集群模式的基础上给queue加几个副本(在不同的broker中),他们之间有主从关系,主queue负责读写数据,从queue负责同步主queue的数据,主queue挂了从queue顶上,对于写操作,数据写入主queue后会将exchange和queue的数据同步给其他broker

(牺牲吞吐量换取高可用,带宽压力大)

Quorum队列集群

rabbitmq基于erlang语言开发,它自带虚拟机和分布式通信框架,rabbitmq通过这个分布式通信框架在broker中同步元数据,但是如果broker之间通信断开,可能会出现每个queue都认为自己是主queue,也就是脑裂问题,解决办法就是通过raft一致性算法来同步多个broker中的元数据和队列数据 ,通过引入选举机制来解决网络分区问题

RabbitMQ通过交换机持久化、队列持久化、消息持久化 三层机制(rabbitmq3.6版本后加入lazy queue,收到消息直接存入磁盘而非内存),确保消息在RabbitMQ服务器重启后依然存在;通过Confirm机制、手动ACK、死信队列等机制,确保消息从生产者到消费者的整个流程可靠无丢失

相关推荐
深蓝电商API8 小时前
分布式事务在跨境交易中的解决方案
分布式·跨境电商·代购系统·反向海淘·代购平台·跨境代购
我真会写代码12 小时前
从入门到精通:Kafka核心原理与实战避坑指南
分布式·缓存·kafka
黄俊懿14 小时前
【架构师从入门到进阶】第二章:系统衡量指标——第一节:伸缩性、扩展性、安全性
分布式·后端·中间件·架构·系统架构·架构设计
一叶飘零_sweeeet14 小时前
击穿 Kafka 高可用核心:分区副本、ISR 机制与底层原理全链路拆解
分布式·架构·kafka
007张三丰15 小时前
常用缓存技术全方位解析:从本地缓存到分布式缓存
分布式·缓存
tianyuanwo19 小时前
Koji 分布式编译调度机制深度解析:多架构异构节点的资源优化方案
分布式·架构
江沉晚呤时19 小时前
.NET 9 快速上手 RabbitMQ 直连交换机:高效消息传递实战指南
开发语言·分布式·后端·rabbitmq·.net·ruby
Volunteer Technology19 小时前
zookeeper基础应用与实战二
分布式·zookeeper·云原生
姚青&21 小时前
Pytest 测试用例并行运行与分布式运行
分布式·测试用例·pytest
若水不如远方2 天前
分布式一致性(六):拥抱可用性 —— 最终一致性与 Gossip 协议
分布式·后端·算法