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

cgyqldqp  于 2022-11-05  发布在  Java
关注(0)|答案(1)|浏览(155)

我使用的是Akka Java库(不幸的是,是Classic版本)。

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

而且,它说:“此外,这些参数也有特殊值。如果您指定:-1maxNrOfRetriesDuration.Inf()withinTimeRange,那么子进程总是无限制地重新启动”。问题是,在我的Java(openjdk-11)中,Duration.Inf()实际上并不存在!
我读过一些SO的答案,它们指定了有效的最大持续时间,但是Akka似乎不认识它们。我能做的最好的事情就是指定Duration.ofNanos(Long.MAX_VALUE)
我遗漏了什么吗?实际上有值要输入还是Akka文档只是错误的?

qacovj5a

qacovj5a1#

这里的Duration.Inf()并不是指java.time.Duration(尽管文档中上面的代码片段确实使用了JavaDurationAPI)。在幕后,Akka将JavaDuration转换为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 DurationDuration.ofSeconds(Long.MAX_VALUE).plusNanos(999999999)。注意,在Akka内部,当转换为Scala Duration时,这将被视为小于无限持续时间,但这 * 可能 * 并不重要。

相关问题