当前位置: 首页 > 知识库问答 >
问题:

Datastax Cassandra驱动程序重试策略延迟?

皇甫建木
2023-03-14

我正在使用Datastax Cassandra驱动程序,并设置了RetryPolicy,以便在主机不可用时重试。然而,我注意到它尽可能快地重试。我想将其更改为在重试之间有越来越大的延迟,而不是在集群陷入困境时对其进行重击。这对于过载的请求错误尤其重要,因为我确实希望在这些情况下重试,但会有很大的延迟。

哪里是实施延迟的正确地点,什么是正确的机制?我应该抛出一个线程吗。睡眠(…) 在我的RetryPolicy中?

我不介意在线槽上接一个请求(接近机内请求的最大数量),但如果我们还没有达到机内请求限制,我不同意完全阻止其他写入。


共有1个答案

甘兴学
2023-03-14

您可以通过添加延迟来实现自己的重试策略。最简单的方法是选择默认重试的源代码,并自己修改它,以实现重试的指数延迟或类似的功能。

对于指数延迟,只需查看http://docs.datastax.com/en/drivers/java/3.0/com/datastax/driver/core/policies/ExponentialReconnectionPolicy.html看看它是如何工作的

 类似资料:
  • 在RetryTemplate里面,执行excuter方法是重试还是失败是由RetryPolicy决定的,这也是一个RetryContext工厂.这个RetryTemplate有责任使用当前的策略创建一个RetryContext并且把它注入到RetryCallback在每一次尝试中。回调失败后RetryTemplate必须由RetryPolicy决定使其更新状态(存储在RetryContext中),

  • 下面是execute()方法所做的事情

  • 我已经将lambda集成设置为具有固定保留并发的SQS,以限制对后端服务的请求。我需要使用DLQ来跟踪和存储错误。 使用SQS的ReDrive策略与lambda函数的DeadLetterConfig在行为上有什么不同? 我对队列中有大量消息但lambda并发性有限时的行为特别感兴趣。

  • 我想用Spring集成创建一个简单的IntegrationFlow,但我遇到了一些困难。 我想创建一个集成流,从Rabbit Mq中的队列中获取消息并将消息发布到endpointRest。 我要处理的问题是,当一个请求失败时,它会继续无休止地重试,如何在这段代码中实现重试策略?例如,我想要3次重试,第一次重试在1秒后,第二次重试在5秒后,第三次重试在1分钟后。

  • 我正在用Chrome浏览器测试WebApp。 P.S.:有效,但之后对Webdriver的任何处理都会抛出。我需要在停止其引导后获取页面的当前url。