异步 API 设计:使用队列与 RabbitMQ 构建高效系统
1. 异步 API 与队列的基础
在同步 API 中,阻塞代码在准备发送给客户端的响应时起着至关重要的作用。然而,在异步设计中,非阻塞是关键。队列和工作器有助于实现非阻塞代码。服务器可以有多个工作器并行运行,它们可以处理队列中的内容。当客户端通过异步 API 请求操作时,服务器可以将该请求放入作业队列,所有工作器在轮到自己时会拾取任务。
这种方法可以减轻 API 服务器的负担,使其专注于业务逻辑,而不是被并行/独立任务(如发送电子邮件、联系第三方服务等)阻塞。
队列的一些用例如下:
- 压缩图像并将最终结果通过电子邮件发送。
- 自动反向压力(将服务器负载限制在可预测的范围内)。
为了详细解释这个概念,我们将开发一个异步 API 服务器,它可以执行两种不同类型的作业:
- 将给定信息记录到数据库。
- 发送电子邮件。
条件是它不应阻塞其他操作。API 应向客户端返回作业 ID 票据,客户端可以使用该信息获取作业的运行信息。
在实现之前,我们可以选择从头开始实现队列/工作器,但也有许多优秀的开源队列系统,如 RabbitMQ 或 ZeroMQ。由于 RabbitMQ 的流行以及 Go 绑定的成熟度,我们将使用它。
2. RabbitMQ 简介与安装
RabbitMQ 实现了一种名为高级消息队列协议(AMQP)的消息传递协议,用于支持工作队列。它还支持许多其他数据交换模式,如发布/订阅、主题/订阅、消息路由和远程过程调用(RPC)。
我们可以使用 Docker
超级会员免费看
订阅专栏 解锁全文
1347

被折叠的 条评论
为什么被折叠?



