第一,你的业务需要用到消息队列
第二,消息需要持久化,重启服务能继续执行未完成的任务
第三,可能有大量的消息需要处理, rabbitmq 的性能能够满足
因为消息服务的的通信协议和规则很随意而且是异步的,所以其实可以做很多很多事。
例如:
注册用户时候,发送激活邮件。
监控应用中抛出的异常,邮件通知管理员。也就是增加监控功能,且一个消息服务可以监控无数个应用。
异构型架构系统间的各服务通信,因为消息服务于平台或者语言无关,典型的应用在 SOA 分布式体系的各个服务之间,可以做到,我依赖你,但是我可以不在乎你是否在运行,的关系。
例如,微信的抢红包,淘宝的订单,铁道部的购票等,如果不丢给队列排队处理,突然性的高并发会有让应用或者数据库瘫痪的风险。
其实很简单,一种应用是:因为很多任务是需要花费大量时间的,比如你设计一套系统,要分别发送 100 封邮件给不同的人。在用户点击发送按钮之后,如果在完成这 100 封邮件后才反馈给用户发送完成,那用户体验简直崩溃。因此此时你将这个任务添加到 rabbitMQ 队列里,前台立即返回给用户说成功,后台用 python 慢慢发送就好。
为什么会需要消息队列(MQ)?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。