繁体   English   中英

Java Akka API 的最大持续时间是多少?

[英]What is the maximum Duration in Java Akka API?

我正在使用 Akka Java 库(不幸的是,经典版本)。 在实施容错策略时, 文档提供了这样的片段:

private static SupervisorStrategy strategy =
    new OneForOneStrategy(
        10,
        Duration.ofMinutes(1),        // <----- Note here!
        DeciderBuilder.match(...)
                      .build();

此外,它说:“此外,这些参数有特殊值。如果您指定: -1maxNrOfRetries ,以及Duration.Inf()withinTimeRange ,那么孩子总是重新启动,没有任何限制”。 问题是,在我的 Java (openjdk-11) 中, Duration.Inf()实际上并不存在! .

我已经阅读了一些 SO 答案,这些答案指定了有效的最大持续时间,但 Akka 似乎无法识别它们。 我能做的最好的就是指定Duration.ofNanos(Long.MAX_VALUE)

我错过了什么吗? 实际上是否有输入值或者 Akka 文档是错误的?

Duration.Inf()没有引用java.time.Duration (即使文档中上面的代码片段确实使用了 Java Duration API)。 在底层,Akka 将 Java Duration转换为scala.concurrent.duration.Duration ,它确实有一个Inf (命名模式表明它是 Scala 中的一个常量),它被定义为大于任何FiniteDuration )。 Java API 只有一个构造函数,它采用java.time.Duration

这应该有效:

new OneForOneStrategy(
    10,
    scala.concurrent.duration.Duration.Inf(),
    true,  // have to explicitly pass the default loggingEnabled
    DeciderBuilder.match(...).build()
);

Java Duration的最大值是Duration.ofSeconds(Long.MAX_VALUE).plusNanos(999999999) 请注意,在 Akka 内部,当转换为 Scala Duration时,这将被视为小于无限持续时间,但这可能并不重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM