消息队列应用背景
消息队列常见的应用场景有:异步,解耦,削锋。
1. 异步处理数据
异步可以类举生活中的例子,比如说是取送快递,如果快递员需要直接对用户进行签收,那么效率会大大降低,而引入快递柜(消息队列)通过引入快递暂存的功能,从而可以达到异步的效果,效率可以大大增加。
2. 系统应用解耦
解耦:在不引入消息队列的情况下,消费者想要获取数据,需要直接于生产者进行联系,这样耦合度就会比较大,引入消息队列后,消费者想要获取信息,直接从消息队列中进行获取就可以了,生产者和消费者之间的联系就非常少了,从而达到解耦的效果。
3. 业务流量削锋
削锋:这里可以举出双十一,618等购物狂欢活动,在不引入消息队列的情况下,在特定时间点,数据暴增,可能会导致一端的服务扛不住。在引入消息队列之后,生产者写数据到消息队列,下游从消息队列中拿数据, 在高峰期起到对流量的一个削锋,从而保证了整个服务的可用性。
总结:消息队列主要解决了消息不要求实时处理,一份数据多处使用,不同消费方消费速度不同的场景。
主流的消息队列产品
消息队列对比
消息队列的核心模型
生产者
生产者(producer),主要生产消息,并发送给消息队列,通常有同步,异步两种方式。
消息队列
消息队列(message queue),主要保存/暂存生产者生产的消息,并将消息以某种方式告知消费者,消息队列一般具备消息分类(topic)的能力,存储消息的队列称为msg queue。
消费者
消费者(consumer),主要从消息队列中取出消息,并进行消费,这里的取出消息的方式主要有两种(主动拉取消息,等待推送消息)
推/拉模型区别
消费者消费模型(1:N:M )
(1:N:M):一份数据发送到N个消费者组中的M个消费者。
为了提高消费效率,引入消费者组,发布订阅时,以消费者组/订阅作为单位。offset以(group+topic+partition)为单位维护。组间广播,组内单播。
注意:一般,一个队列只能被一个消费者组中的一个消费者消费,但一个消费者可以消费多个msg queue中的数据。