簡體   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