简单模型
比如一个接口处理短信发送,如果没处理完就可以放入消息队列;然后等待接口处理,如果接口处理短信发送失败则可以再次放入消息队列,减少尝试的次数和占用的线程,再次进行处理。
消息队列的特性
- 业务无关:只做消息分发
- FIFO:先投递先到达
- 容灾:节点的动态增删和消息的持久化
- 性能:吞吐量提升,系统内部通信效率提高
为什么需要消息队列
- 【生产】和【消费】的速度或稳定性等因素不一致
举几个例子
- 业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力。就可以把短信发送申请丢到消息队列,直接返回用户成功,短信发送模块再可以慢慢去消息队列中取消息进行处理。
- 调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送。调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送。
- 任务处理类的系统,先把用户发起的任务请求接收过来存到消息队列中,然后后端开启多个应用程序从队列中取任务进行处理。任务处理类的系统,先把用户发起的任务请求接收过来存到消息队列中,然后后端开启多个应用程序从队列中取任务进行处理。