我正在使用 MassTransit 和 RabbitMQ,其中一位消费者将向 Graph API 发出批量请求。鉴于批次可能包含受限的响应,我想知道如何正确设置重试逻辑。
GraphAPI 批处理指南指出,API 的客户端应检查批处理中每个请求的响应,并获取每个受限响应的
RETRY_AFTER
标头值,获取这些值的 MAX (MAX_RETRY_AFTER
),并将其用作重试前的延迟。
批处理请求是从消费者的 Consume 方法中发出的。所以,直接的想法是在那里引入延迟。接下来,它可以手动处理重试或将错误返回给代理并让重试策略生效。
在前者中,感觉消费者会变成一种奇怪的长期消费者。另外,我将不得不手动考虑
MAX_RETRIES
,这样它就不会永远运行。
现在,如果依赖重试策略,取决于它的设置方式,它可能会在
MAX_RETRY_AFTER
之上添加额外的延迟(可能微不足道或不重要)。消费者仍然会“长期运行”。
我还考虑了第三种选择,但我不确定是否可行。这将设置一个“动态”重试策略,其中重试之前使用的延迟将被确定为消费逻辑的一部分。
就是说,有人可以就这些选项提供一些指导吗?最佳做法是什么?有什么需要注意的陷阱吗?
提前致谢!