如何解决RabbitMQ预定的消息和撤消功能
是否可以使用RabbitMQ安排消息并在满足某些条件时也删除消息(计划要处理)? 我们有一个需要调用外部服务以获取一些数据的要求。该调用是异步的。客户端在调用服务器的API端点时提及其所需的数据。服务器仅以确认已收到客户端请求的方式进行响应。在内部,服务器还会开始处理客户端请求,它将使用客户端有时返回的对查询的实际响应来调用客户端API端点。
有一个时间限制(30秒),直到客户端需要等待从服务器获取响应为止。如果客户端在30秒内收到响应,则它将继续执行。即使客户端在30秒内未收到服务器的响应,它也会继续执行其他步骤。
客户端和服务器之间每秒发生成千上万的独立事务(请求和响应)。客户端如何使用RabbitMQ跟踪最有效的请求和响应。 RabbitMQ插件rabbitmq_delayed_message_exchange可以用于客户端将新消息与x-delay标头(30秒)一起推入队列的情况吗?如果客户端在30秒之前收到服务器的响应,如何从队列中删除计划的消息?
解决方法
我将执行以下操作:
- 也使响应也通过RabbitMQ(使用RPC)
- 确保响应队列的名称也作为参数被发送,该参数通过某些交换策略(路由键或使用标头交换)用于路由它
- 使用适用于2的正确策略建立DLX交换。
- 在客户端->服务器队列中设置30秒TTL
在通常情况下,该如何工作?
- 客户创建回复队列
- 客户端将请求发送到服务器
- 客户从回复队列中消费
- 服务器使用消息并将响应发送到答复队列
超时会发生什么?
- 客户创建回复队列
- 客户端将请求发送到服务器
- 客户从回复队列中消费
- 请求消息TTL触发器
- RMQ使请求消息死信到回复队列
- 客户收到自己的请求而不是响应
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。