消息队列MQ

消息队列MQ

消息队列的特点:
异步处理,系统解耦,尖峰削谷,系统通讯
应用场景:
ActiveMQ,RabbitMQ,RocketMQ,Kfaka
ActiveMQ,RabbitMQ应用较少,RocketMQ是阿里的开源代码,延迟ms级别,可以处理十万条消息,Kfaka日志采集分析
队列:先进先出
电商系统,支付系统成功后的处理,优惠券,积分,短信,邮件等处理
单线程处理时间会增加,严重影响响应时间和用户体验,同时并发量很低
多线程处理会缩短响应时间,但是系统的吞吐量低,并发量少
消息队列可以异步处理,同时解耦系统,还可以提升吞吐量,提升其并发能力
消息队列引入的问题
消息队列引入的问题,增加中间件引入系统复杂性,系统部署以及消息队列宕机的处理,还引入消息丢失,消息重复以及消息顺序消费
消息丢失:
生产者发送消息后,消息队列验证消息是否持久化成功,成功后返回消息存储成功结果,生产者发送处理结果,消息队列根据业务处理结果更新消息状态,发送消息
消息重复:
消息消队列都有重传机制,有异常会重传一次,发出去给多个子系统进行消费,消费结束后,异常消费的会进行重传,根据消息ID+业务场景仅从幂等操作,消息消费时,先在流水表中查看,如果流水表中有该记录就直接返回,如果没有该记录就进行消费,流水表在数据库中就是强校验,弱校验是消息ID+业务场景存储在redis缓存中,一定时间的消息在redis中判断。
消息顺序:
消息生产按照顺序执行,但是发送的时候顺序改变,导致消费的时候不能达到预期目标,比如消息顺序执行增,改,删,消息队列接收到的是,改,删,增。RocketMQ下有主题topic,一个topic有多个队列,MessageQueueSelector队列三种选择机制里的Hash队列,让同一个订单发送到同一个队列里,然后再同步发送,保证发送有序,RocketMQ的队列是先进先出,只要保证消费者是顺序消费就可以了,消费者保证是一个,但是消费者有可能是多线程,因此还是要消费成功一个再进行下一个。

你可能感兴趣的:(信息与通信,网络安全,java,spring,cloud)