裸泳的猪

沾沾自喜其实最可悲

0%

消息队列

消息队列

作用:

  1. 异步
  2. 削峰
  3. 解耦

异步

比如一个流程下需要正常的业务处理,中间需要发送短信,扣减优惠卷等,可以生产消息进入队列,由短信系统,优惠卷系统异步处理,减少主业务逻辑链路,提升效率。

解耦

异步,使用线程,线程池去做不是一样的么
线程,线程池代码需要固定,后续如果光是短信平台要改东西,主流程还要发布。消息队列可以实现解耦。

削峰

服务器,Redis,MySQL各自的承受能力都不一样,你直接全部流量照单全收肯定有问题啊,直接就打挂了。

消息重复消费

系统重试等原因造成
解决方法:

  1. 接口幂等 无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.请求的是相同的流水号的话,判断处理过的话 直接返回成功就行了。

消息顺序消费

要保证顺序消费,需要确保整个流程中有序:生产者生产有序,放入消息中间件中有序,消费者消费时有序。

一个topic下有多个队列,为了保证发送有序,RocketMQ提供了MessageQueueSelector队列选择机制
我们可使用Hash取模法,让同一个订单发送到同一个队列中,再使用同步发送,只有同个订单的创建消息发送成功,再发送支付消息。这样,我们保证了发送有序
RocketMQ的topic内的队列机制,可以保证存储满足FIFO(First Input First Output 简单说就是指先进先出)。

剩下的只需要消费者顺序消费即可。

-------------本文结束感谢您的阅读-------------