rabbitmq

RabbitMQ是一款开源的AMQP消息代理软件,用于服务间的解耦、异步处理和削峰。本文介绍了其结构,包括交换机类型如direct、fanout和topic,以及五种应用场景,如简单模式、工作模式和发布订阅模式。同时,讨论了如何避免消息重复投递和消费,以及消息基于信道的传输方式和确保消息不丢失的策略。

1.RabbitMQ是什么

实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用erlang语言编写的,企业级消息代理软件。实现了服务之间的解耦

2.为什么要使用RabbitMQ 解耦、异步、削峰

在分布式系统下具备异步,削峰,负载均衡等一系列高级功能;
拥有持久化的机制,进程消息,队列中的信息也可以保存下来。
实现消费者和生产者之间的解耦。
对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。
可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单。

3.结构

客户端:一切连接rabbitmq的客户端可以分为两个角色 生产者:消息生产者发送者 消费者:消息接受者处理者
核心组件:
a.连接相关:connection:长连接 channel:信道短连接
b.交换机组件:基于erlang语言开发的,rabbitmq核心组件,处理客户端中生产短所有消息的高并发,客户端并发能力不稳定,生产端的消息并不是直接发送给队列,队列能力接受处理消息的前提,就是交换机的逻辑。
c.队列queue:真正处理消息的rabbitmq的组件,消息的顺序排队,确定机制等,都有queue维护

4.交换机类型direct(routing路由模式),fanout(发布订阅),主题模式(topic)

5.rabbitmq五种场景

a.简单模式(一对一):在一次消息生产消费过程中,一个生产者对应一个消费者,形成一发一接的结构;这里使用的是路由交换机。应用场景:消息软件,短信、微信
b.工作模式(一发多接,资源争抢):在生产消息发送到对列,之后由多个消费端争抢,谁的空闲率大,抢到的几率就大,可以使用任意的交换机。场景:强红包
c.路由模式:路由模式不关心后端消费者数量,如果一个消费者监听一个对列,简单模式。如果多个消费者监听一个对列,争抢模式。场景:error错误,打印在开发人员屏幕
d.发布订阅:一条消息不携带具体路由key,经过fanout模式的交换机后发送给后端所有对列。场景:邮件群发
e.主题模式:是一种特殊的路由,以现在后端对列绑定topic类型交换机时,可以不适用具体路由key,可以使用匹配符号。

6.如何避免消息重复投递或者重复消费?

在消息生产时,MQ内部针对每条生产者发送的消息生成一个inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列;
在消息消费时,要求消息体中必须要有一个bizId(对于同一业务全局唯一,如支付ID、订单ID、帖子ID等)作为去重的依据,避免同一条消息被重复消费

7.消息基于什么传输?

基于信道的方式传输数据,信道是建立在真实的tcp连接内的虚拟连接,且每条tcp连接上的信道数量都没有限制

8.如何确保消息不会被丢失?

消息持久化,前提是队列必须持久化,将消息写入磁盘是上的一个持久化日志文件,当发布一条持久性消息到持久性服务器上时,rabbitmq会在消息提交到日志文件后才会发送响应。一旦消费者从持久队列中消费了一条持久化消息,tabbitmq会在持久化日志中把这个消息标记一下,等待垃圾回收,如果消息没有被消费,rabbitmq宕机,重启,他会自动重建交换机和队列,并且重新发布消息到合适的队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值