RabbitMQ预定的消息和撤消功能

问题描述

是否可以使用RabbitMQ安排消息并在满足某些条件时也删除消息(计划要处理)? 我们有一个需要调用外部服务以获取一些数据的要求。该调用是异步的。客户端在调用服务器的API端点时提及其所需的数据。服务器仅以确认已收到客户端请求的方式进行响应。在内部,服务器还会开始处理客户端请求,它将使用客户端有时返回的对查询的实际响应来调用客户端API端点。

一个时间限制(30秒),直到客户端需要等待从服务器获取响应为止。如果客户端在30秒内收到响应,则它将继续执行。即使客户端在30秒内未收到服务器的响应,它也会继续执行其他步骤。

客户端和服务器之间每秒发生成千上万的独立事务(请求和响应)。客户端如何使用RabbitMQ跟踪最有效的请求和响应。 RabbitMQ插件rabbitmq_delayed_message_exchange可以用于客户端将新消息与x-delay标头(30秒)一起推入队列的情况吗?如果客户端在30秒之前收到服务器的响应,如何从队列中删除计划的消息?

解决方法

我将执行以下操作:

  1. 也使响应也通过RabbitMQ(使用RPC
  2. 确保响应队列的名称也作为参数被发送,该参数通过某些交换策略(路由键或使用标头交换)用于路由它
  3. 使用适用于2的正确策略建立DLX交换。
  4. 在客户端->服务器队列中设置30秒TTL

在通常情况下,该如何工作?

  1. 客户创建回复队列
  2. 客户端将请求发送到服务器
  3. 客户从回复队列中消费
  4. 服务器使用消息并将响应发送到答复队列

超时会发生什么?

  1. 客户创建回复队列
  2. 客户端将请求发送到服务器
  3. 客户从回复队列中消费
  4. 请求消息TTL触发器
  5. RMQ使请求消息死信到回复队列
  6. 客户收到自己的请求而不是响应