rabbitmq笔记

1、如何保证消息的顺序性

生产者端:

根据订单号 根据消息的hashkey进行分组,

确保有关系的分到一组

放到队列中

每个队列对应一个消费者

消费者端:

消息全部放到一个队列中

消费者内部会用内存队列

根据消息的hashkey分组排序

然后再  多线程  来消费不同队列中的数据

2、如何提高消费的速率

增加机器

协程

控制拉取的条数

3、mq有哪几种路由的方式

direct

根据routingkey方式进行完全匹配

fanout

完全忽略routingkey

topic

根据routingkey方式进行模糊匹配

4、mq消息是基于什么传输的

基于信道channel来传输数据的

排除了使用tcp连接来进行数据传输

因为tcp的开销大,创建和销毁需要大的开销

5、mq多个消费者监听一个队列时,消息是如何分发的

轮询

公平分发  根据能力分发

6、消息在什么时候会变成死信  死信的来源

过时的信息

被拒绝的信息

消息队列长度达到限制

7、如何自动删除长时间没有消费的消息

对每条消息设置过期时间

对队列设置过期时间

8、延时队列的实现

ttl + 死信

过期的信息会转移到死信队列,然后去完成后期的业务

9、rabbitmq的高级特性

消息传递的可靠性

消费端限流

延时队列

消息的幂等性

消息的积压

重复消费

1.消息传递的可靠性

生成方

消息的发送方,为防止消息的丢失,投递失败,提供了confirm和return两种解决方法

消费方

接收信息的三方式

自动确认  手动确认  异常情况确认

2.消费端限流

请求瞬间增多,达到每秒50000个请求

可以利用mq,每秒从mq中只是拉取1000个请求 

拉取服务器每秒最大处理的请求数

3.延时队列

ttl + 死信

过期的信息,如订单未支付的,会放在死信交换机中,通过死信中的队列处理后续逻辑

4.消息的幂等性

在mq中,幂等性是指  多次消费一条消息 和 消费一条消息 的结果是一样的

保证消息的幂等性,可以使用   乐观锁机制

5.消息的积压

解决办法:

上多个消费者

把消息放在数据库中,后期再慢慢处理

6.保证消息的不重复消费

在第一次消费消息的时候,可以把key放在redis中,这个key需要是全局的唯一的,消息id,还需要设置过期的时间

下次再消费的时候,会判断这个key是否存在,存在则过滤

或者是设置数据库唯一主键

10、分布式事务为什么不可靠

存储节点的增加

网络抖动

11、分布式事务解决方案

2pc

3pc

tcc

mq

1.2pc

单点故障问题

一旦事务协调者的节点挂掉,会导致参与者接收不到提交或者回滚的通知

数据不一致问题

网络问题,一部分事务提交了消息,另一部分参与者没有提交消息

2.3pc

参与者没有收到协调者的commit请求,就会自动本地commit提交

3.TCC

是一个应用层

4.mq

保证消息百分百投递成功

confirm

生产者投递消息给到mq

本地数据库就会保存到订单的投递状态

mq会把这个投递状态发送给到php监听

监听器会把订单号的状态改为已经投递

有个脚本 会经常查询哪些订单没有成功,重新投递

保证消息百分百消费成功

ack

幂等性

12、mq架构流程图 设计分析

1.前端下单

2.mq中间件

confirm

确保消息百分百投递到派单微服务

3.派单微服务

ack

确保消息百分百消费成功

幂等性

4.插入派单表

13、事务最终一致性的优点

消息队列异步

可靠性,最终一致性

不会存在大量的锁

14、2pc和mq各自适合什么场景

mq  利用mq会实现数据的一致性

15、高峰值时,大流量时,mq容易爆掉,kafka不会

mq是用 内存 做持久化的

kafka是用 磁盘 做持久化的

16、消息堆积太多,多个消费者消费不掉,怎么处理

限流+多个消费者负载

协程

根据能力分配

17、不用监听器可以吗

可以

但生产者不会知道有没推送成功

18、mq有哪几种集群方案

主备

远程

镜像

多活

镜像

保证数据100%不丢失

一般大厂都会用这种模式

目的是为了保证数据的高可靠性 实现数据的同步

主节点通过镜像 把数据同步到其他的 mq节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值