MessageQueue
Siona
MessageQueue
消息队列?应用场景?
消息队列是一种异步通信机制,用于在应用程序之间传递消息。它可以将消息暂时存储在队列中,然后按照一定的顺序和条件将消息传递给消费者。
✅ 应用场景:
▪ 异步处理:通过将任务转换为消息,异步地进行处理,可以提高系统的吞吐量和响应速度。
▪ 系统解耦:在不同的系统或模块之间使用消息队列进行通信,可以实现系统的解耦,提高系统的灵活性和可扩展性。
▪ 流量控制:消息队列可以对消息进行缓存和限流,保证系统的稳定性和高可用性。
▪ 应用解耦:在同一个应用程序中,不同的模块之间使用消息队列进行通信,可以实现模块之间的解耦,提高代码的可维护性。
▪ 日志处理:通过将日志转换为消息,可以实现日志的异步处理,提高系统的性能和可维护性。
✅ 应用场景举例:
▪ 异步处理:
实时性要求不高的场景,如用户注册后发送注册短信和注册邮件。
传统串行方式,将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,再返回给客户。
并行方式,将注册信息写入数据库成功后,发送注册邮件和发送注册短信同时进行,三个任务完成后,返回给客户端。可以提高处理时间。
假如三个业务节点每个使用50毫秒,不考虑网络等其他开销,则串行方式的时间为150毫秒,并行的时间可能是100毫秒。
▪ 系统解耦:
▪ 流量控制(流量削峰):
① 在秒杀系统中使用广泛,一般因为流量过大,导致流量暴增,然后应用挂掉。
解决方案为:在前端加入消息队列,可以控制活动的人数,缓解短时间内高流量压垮应用。
用户的请求,服务器接收后,首先写入消息队列,加入消息队列过长或者长度超过最大数量,则直接抛弃用户请求或者跳转到错误页面。
② 订单系统中, 请求太多, 下单的太多. 那么直接将生成的订单id等信息放到MQ中, 让新线程监听MQ, 然后慢慢地去进行订单创建, 库存扣减等工作.
▪ 应用解耦:
用户下单后,订单系统需要通知库存系统。
传统方法是:订单系统调用库存系统的接口。
假如库存系统没有办法完成访问,则整个操作无法完成。但是如果将消息写入消息队列,用户下单后,订单系统持续化处理,将返回用户订单下单成功,库存系统,将采用拉/推的方式,获取下单信息,库存系统根据下单的信息,进行库存操作。如此设计后,订单系统与库存系统将分离开来,订单系统写入消息队列,之后就不再关心其他后续操作,实现了解耦。
▪ 日志处理:
将消息队列使用在日志处理中,比如Kafka的应用,解决大量日志传输的问题,日志采集客户端,负责日志数据采集,定时写入Kafka队列;Kafka消息队列,负责日志数据的接收、存储、转发;日志处理应用:订阅并消费kafka队列中的日志数据。