你们的项目哪里用于mq 1? 使用MQ异步发送优惠券吗?
2 .使用MQ异步发送邮件
3 .使用MQ异步按钮库存,总之执行耗时的代码操作,传递到MQ异步实现接口。
为什么需要使用MQ 1.异步处理(多线程和MQ )
2 .实现去耦
3 .流量削减峰值(MQ可以实现高同时性)
MQ和多线程之间的异步差异1 .多线程异步实现占用cpu资源,可能影响业务线程的执行,导致cpu争用
2 .用MQ方式实现异步是完全解耦,适合大规模的互联网项目
3 .小项目可以使用多线程实现异步,大项目建议使用MQ实现异步;
M问如何避免消息堆积的问题1 .背景:生产者发送消息的速度和我们消费者消费的速度完全不一致。
2 .生产者发送消息的速度根据消费者消耗的速度,我们的消息存储在我们mq服务器端,不会立即被消费者消耗,所以会出现消息存储的问题
3 .注意: rabbitmq消费者我们的消息消费成功后会立即删除。 如果成功消耗kafka或rocketmq邮件,则不会立即删除邮件。
4 .解决方案: a .提高消费者消费速度(为我们的消费者实现集群) b .消费者应该批量获取信息以减少网络传输的次数
MQ停机后会丢失消息吗? 因为我们的信息会持久化在我们的硬盘上;
如何防止MQ消息丢失?
1 .将MQ服务器端的消息持久化到硬盘
2 .生产者消息确认机制必须确认消息成功打印在硬盘上,人工消息传递才能成功。
3 .消费者在必须确认消息消耗成功的rabbitmq中,不能删除消息。 rocketmq或kafka会提交offset生产者的投递消息
mq停机怎么办1 .生产者送达短信记录msg短信内容,后期生产者送达短信失败时
2 .可以基于该日志记录实现补偿机制;
3 .补偿机制(获取此msg日志消息的内容并重试) )。
MQ保证消息顺序一致性的方法1 .大多数项目是不需要保证MQ消息顺序一致性的问题,可能只在特定场景中需要,如MySQL和Redis实现异步数据
2 .所有消息都需要传递到同一mq服务器,存储在相同的分区模型中,最终消费在同一消费者身上。 核心原理:设置相同的消息密钥,计算相同的消息密钥在同一分区中存储散列。 3 .如果保证信息顺序的一致性,就有可能降低消费者的消费速度。
MQ如何保证消息乘幂等问题1 .消费者获取消息,如果消费消息失败,MQ服务器以间隔的形式实现重试策略;
2 .重试过程中,需要保证业务幂等性问题,保证业务不能重复执行。
3 .在全局消息id中,如果业务逻辑已经运行,您可以事先咨询不要重复运行。
4 .我们也需要在数据库数据库数据库水平上保证幂等性问题、唯一主键约束、乐观锁定等。
MQ和Redis如何保证数据完整性问题方案1 :直接删除Redis缓存; 基于方案2:的异步同步更新方案基于canal的订阅binlog同步