一、什么是消息队列
消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到 MQ 中而不管谁来取,消息使用者只管从 MQ 中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。
二、消息队列的应用场景
消息队列主要有以下应用场景:
异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,可以减少处理时间,如短信通知、文件下载、订单推送等。
应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败,如人脸识别,文字翻译等不能做到业务系统里面,业务系统负责生产消息,人脸识别系统消费消息。
限流削峰:广泛应用于秒杀或抢购活动中,使用消息队列避免流量过大导致应用系统挂掉的情况,1. 网关在接受到请求后,就把请求放入到消息队列里面 2.后端的服务从消息队列里面获取到请求,完成后续的秒杀处理流程。然后再给用户返回结果。优点:控制了流量 缺点:会让流程变慢。
消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理;如大量的物联网系统中,平台和硬件端的通讯需要消息队列。
日志聚合:可以使用 Kafka 收集来自不同系统的日志并将其存储在集中式系统中以供进一步处理。
三、什么是发布/订阅模式
发布/订阅模式下包括三个角色:
角色主题(Topic)
发布者(Publisher)
订阅者(Subscriber)
发布者将消息发送到 Topic,系统将这些消息传递给多个订阅者。
发布/订阅模式特点:
每个消息可以有多个订阅者
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行