MQ系列面试

先来说说什么是MQ,MQ与多线程之间的区别

MQ是消息中间件 可以实现异步 多线程也可以实现异步

使用传统http协议方式调用接口存在的缺点

如果服务器端没有及时的响应给客户端的时候,容易造成客户端阻塞等待。

服务器响应超时 客户端发送重试机制 需要考虑避免业务逻辑重复执行

无法支持高并发请求

如果服务器端不在的情况下,容易丢失请求,比如发送个请求消息,服务器突然宕机了。

如果服务器端处理每个请求非常耗时时间的情况下,容易导致客户端的请求阻塞等待。

多线程处理异步的缺点

在同一个时刻只有一个cpu只能够运行一个线程

非常消耗cpu的资源,有可能影响到业务线程正常接收客户端的请求。

所以小的项目可以使用多线程实现异步 大项目建议一定使用mq

MQ为何能够实现抗高并发,异步解耦

mq分成几个角色 mq服务器端 生产者 消费者

生产者投递消息 ma服务器端存放消息

如何提高消费者速率

消费者实现批量获取消息

消费者实现集群

主动推送:

主动推送(mq服务器主动推送消费者)消费者与mq服务器端已经建立连接之后,生产者投递消息给mq服务器端,mq服务器端主动将消息推送给消费者。

消息拉取(消费者)

生产者投递消息给mq服务器端,但是消费者不在,消费者在启动的时候与mq服务器端建立连接,判断消费者订阅队列有哪些消息还没有被消费。

mq如何保证消息不丢失

mq服务器端:消息持久化到硬盘

生产者:确保我们的消息投递到mq服务器中

消费者 必须确认消息消费成功

mq如何保证消息顺序一致性

所有消息需要投递到同一个mq服务器,同一个分区模型中存放,最终被同一个消费者消费,核心原理

设定相同的消息key,根据相同的消息key计算hash存放在同一个分区中

如果保证了消息顺序一致性就有可能降低我们消费者消费的速率。

核心办法;消息一定要投递到同一个mq,同一个分区模型,最终被同一个消费者消费。

mq如何保证幂等性的问题

何为幂等性问题,mq服务器向消费者投递了两次相同的消息。就会导致数据库出现了两条相同的数据。

怎么解决了,从全局id的角度去出发,比如msg会自带全局id,跟据全局id去查询,也可以根据业务id去定,先去根据id在数据库中查下,然后有就不插入。

mq与redis如何保证数据一致性问题

在分布式领域中同步数据,很难保证强一致性策略,都是采用最终一致性思想,

短暂的数据延迟是允许的,但是最终数据必须要保证一致性。

方案一 直接删除Redis缓存 延迟双删策略 适用于小项目

方案二 基于MQ异步同步更新

方案三 基于canal框架订阅binlog同步

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值