如何使用RabbitMQ排队API请求

时间:2018-12-05 18:53:12

标签: symfony rabbitmq

我想让使用API​​将一些数据发送到服务器的移动应用程序发出的请求排队。

目前的情况是这样的:

  1. 移动应用发送带有一些数据的请求
  2. 我需要获取数据,对其进行验证(一些数据库查询)并保存到数据库中的一些表中。
  3. 如果验证失败,我需要返回对移动应用的OK响应或错误列表的错误请求。

现在,如果我在3秒钟内有1000个这样的请求,我的服务器将崩溃。

我想使用RabbitMQ将这些请求排队。但是我应该如何应对? RabbitMQ收到消息后,我无法发送OK,因为我不知道验证是否会通过。因此,移动应用程序将等待直到RabbitMQ消息被正确使用?

1 个答案:

答案 0 :(得分:1)

这可以解决您的问题:

  1. 客户端发送请求
  2. 服务器将请求排队,并生成属于已排队请求的唯一标识符,然后发送包含所生成标识符的响应(状态码为202(已接受)),这意味着该请求已在服务器上排队或提交。还没有回应。
  3. 客户端在消息代理上订阅生成的标识符
  4. 队列中的请求在服务器上完成后,它将基于生成的请求标识符将响应发布到消息代理
  5. 客户将收到有关订阅标识符的已发布回复

提示:

  • 我将EMQTT用于消息代理。另一个选择是Rabbitmq MQTT插件