gpt4 book ai didi

java - 在将消息推送到 SQS 时提供请求超时

转载 作者:行者123 更新时间:2023-11-30 05:38:17 24 4
gpt4 key购买 nike

我在我的项目中使用SQS。我想在将消息推送到 SQS 标准队列时提供超时。我所说的超时(不是可见性超时)是指,如果我的消息在 200 毫秒内没有推送到 SQS,那么我会在一段时间后重试推送它。我正在使用 JAVA API 来实现同样的目的。

最初,我尝试通过请求可调用任务将消息推送到 SQS 来自己处理超时,它返回了一个 future 对象,我通过提供超时来等待使用它。但这导致请求被发送到 SQS,在推送消息时,我的超时出现,在收到此已推送消息的响应之前,我的代码认为由于这个 future 对象而超时。

当我查看 SQS 的文档时,我没有找到与调用 SQS 推送、拉取或删除时提供请求超时相关的任何内容。

final Future<ISendMessageResult> future = timeoutHelperThreadPool.getExecutor().submit(() -> {
return getQueueStore().sendMessage(request).get();
});
try {
sendMessageResult = future.get(200, TimeUnit.MILLISECONDS);
logger.info("SQS_PUSH_SUCCESSFUL");
return true;

} catch (final TimeoutException e) {
logger.error("SQS_PUSH_TIMEOUT_EXCEPTION");
}

无论如何,我是否可以确保如果我收到超时,我的消息不会被推送到 SQS,反之亦然?

最佳答案

在你的 catch block 中你可以尝试

catch (final TimeoutException e) {
future.cancel(true);
logger.error("SQS_PUSH_TIMEOUT_EXCEPTION");
}

这里需要注意的一点是,如果在线程中断时消息已经发布到 SQS,您将得到漏报。我建议您为超时设置一些慷慨的值

关于java - 在将消息推送到 SQS 时提供请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com