# 异步架构


## 使用消息队列实现异步架构
同步架构是说，当应用程序调用服务的时候，当前程序需要阻塞等待服务
完成，返回服务结果后才能继续向下执行。

消息队列异步架构的主要角色包括消息生产者、消息队列和消息消费者。消息生产者通常就
是主应用程序，生产者将调用请求封装成消息发送给消息队列。此外还需要开发一个专门的
消息消费者程序，用来从消息队列中获取、消费消息，由消息消费者完成业务逻辑处理。

消息队列的职责就是缓冲消息，等待消费者消费。根据消息消费方式又分为点对点模式和发
布订阅模式两种。

在点对点模式中，多个消息生产者向消息队列发送消息，多个消息消费者消费消息，每个消
息只会被一个消息消费者消费。

在发布订阅模式中，开发者可以在消息队列中设置主题，消息生产者的消息按照主题进行发
送，多个消息消费者可以订阅同一个主题，每个消费者都可以收到这个主题的消息拷贝，然
后按照自己的业务逻辑分别进行处理计算。

发布订阅模式下，一个主题可以被重复订阅，所以如果需要扩展功能，可以在对当前的生产
者和消费者都没有影响的前提下，增加新的消费者订阅同一个主题即可。
## 消息队列异步架构的好处
### 改善写操作请求的响应时间
使用消息队列，生产者应用程序只需要将消息发送到消息队列之后，就可以继续向下执行
了，无需等待耗时的消息消费处理
### 更容易进行伸缩

### 削峰填谷
利用消息队列，我们可以将需要处理的消息放入消息队列，而消费者可以控制消费
速度，因此能够降低系统访问高峰时压力，而在访问低谷的时候还可以继续消费消息队列中
未处理的消息，保持系统的资源利用率。
### 隔离失败
使用消息队列，生产者发送消息到消息队列后就继续自己后面的计算，消费者如果在处理消
息的过程中失败，不会传递给生产者，应用程序具有更高的可用性。
### 降低耦合
耦合会使软件僵硬、笨拙、难以维护，而使用消息队列的异步架构可以降低调用
者和被调用者的耦合。调用者发送消息到消息队列，不需要依赖被调用者的代码和处理结
果，增加新的功能，也只需要增加新的消费者就可以了。
