我使用的是Akka Java库(不幸的是,是Classic版本)。
private static SupervisorStrategy strategy =
new OneForOneStrategy(
10,
Duration.ofMinutes(1), // <----- Note here!
DeciderBuilder.match(...)
.build();
而且,它说:“此外,这些参数也有特殊值。如果您指定:-1
到maxNrOfRetries
,Duration.Inf()
到withinTimeRange
,那么子进程总是无限制地重新启动”。问题是,在我的Java(openjdk-11)中,Duration.Inf()
实际上并不存在!。
我读过一些SO的答案,它们指定了有效的最大持续时间,但是Akka似乎不认识它们。我能做的最好的事情就是指定Duration.ofNanos(Long.MAX_VALUE)
。
我遗漏了什么吗?实际上有值要输入还是Akka文档只是错误的?
1条答案
按热度按时间qacovj5a1#
这里的
Duration.Inf()
并不是指java.time.Duration
(尽管文档中上面的代码片段确实使用了JavaDuration
API)。在幕后,Akka将JavaDuration
转换为scala.concurrent.duration.Duration
,它确实有一个Inf
(命名模式表明它是Scala中的一个常量),它被定义为大于任何FiniteDuration
)。Java API只有一个接受java.time.Duration
的构造函数。这应该可行:
Java
Duration
是Duration.ofSeconds(Long.MAX_VALUE).plusNanos(999999999)
。注意,在Akka内部,当转换为ScalaDuration
时,这将被视为小于无限持续时间,但这 * 可能 * 并不重要。