消息队列概述

消息队列概述

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题。是大型分布式系统不可缺少的中间件。

消息队列应用场景

1.应用解耦

这里写图片描述
传统模式:
系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码。
这里写图片描述
中间件模式:
将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。

2.异步处理

这里写图片描述
传统模式:
一些非必要的业务逻辑以同步的方式运行,太耗费时间。

这里写图片描述
中间件模式:
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。

3.限流削峰

这里写图片描述
传统模式:
并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。

这里写图片描述
中间件模式:
系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

4.消息队列的缺点

  • 系统可用性降低
    在原有系统中引入消息队列增加了故障的机率,降低了系统的可用性。

  • 系统复杂性增加
    引入消息队列后需要考虑更多的问题,比如一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。因此系统复杂性增大。

消息队列的工作模式

消息队列包括两种模式,点对点模式(point to point)和发布/订阅模式(pub/sub)。

1.点对点模式

点对点模式包括以下三个角色:

  • 消息队列(queue)
  • 发送者(producer)
  • 接收者(consumer)
    这里写图片描述

每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。
点对点模式特点:

  • 每条消息只有一个消费者。
  • 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列。
  • 接收者在成功接收消息之后需向队列应答成功。

应用场景:

  • 单消费者,希望发送的每个消息都应该被成功处理。

2.发布/订阅模式

发布/订阅模式下包括三个角色:

  • 主题(topic)
  • 发送者(publisher)
  • 接收者(subscriber)

这里写图片描述

发布者将消息发送到Topic,消息队列将这些消息传递给多个订阅者。
发布/订阅模式的特点:

  • 每条消息只属于一个发布者,但可以有多个订阅者。
  • 一个Topic可以支持多个发布者同时发布消息。
  • 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅之后,才能消费发布者的消息,而且,为了消费消息,订阅者必须保持运行的状态。当然现在支持消息持久化的消息队列对这种事件的相关性有所缓和。

适用场景:

  • 希望发送的消息可以不被做任何处理、或者被一个消费者处理、或者可以被多个消费者处理。

参考资料

猜你喜欢

转载自blog.csdn.net/cl2010abc/article/details/80551551