[英]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();
此外,它說:“此外,這些參數有特殊值。如果您指定: -1
到maxNrOfRetries
,以及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.