yanom blog

様々な技術について書きます

設定を日本語訳します [Akka]

2019/5/11 追記
一旦日本語化したので更新します。これから精査します。

####################################
#Akka Actorリファレンス設定ファイル#
####################################

#これはすべてのデフォルト設定を含む参照設定ファイルです。
#application.confで編集/上書きを行います。

#Akkaバージョン、Akkaのランタイムバージョンに対してチェックされます。生成されたconfファイルからロードされました。
"version"を含める

akka {
  #Akkaのホームディレクトリ、deployディレクトリ内のモジュールがロードされます
  home = ""

  #ブート時に登録するロガー(akka.event.Logging $ DefaultLoggerログ
  #STDOUTまで)
  loggers = ["akka.event.Logging $ DefaultLogger"]

  #LoggingAdapterによって以前に使用されたログイベントのフィルタ
  #ログイベントをeventStreamに発行します。実行できます
  ログソースに基づく#きめ細かいフィルタリング。デフォルト
  #実装は `loglevel`にフィルタをかけます。
  LoggingFilterの#FQCN。 FQCNのクラスは実装しなければなりません
  #akka.event.LoggingFilterとパブリックコンストラクタを使用して
  #(akka.actor.ActorSystem.Settings、akka.event.EventStream)パラメータ
  logging-filter = "akka.event.DefaultLoggingFilter"

  #デフォルトロガーディスパッチャを指定します
  loggers-dispatcher = "akka.actor.default-dispatcher"

  #ロガーはActorSystemの間に同期的に作成され登録されます
  #スタートアップ、そしてそれらはアクターなので、このタイムアウトは
  # 待ち時間
  logger-startup-timeout = 5秒

  #設定されたロガー(「ロガー」を参照)がすぐに使用するログレベル
  #彼らが始められたように。その前に、 "stdout-loglevel"を見てください。
  #オプション:オフ、エラー、警告、情報、デバッグ
  loglevel = "INFO"

  #ActorSystemの起動時にアクティブになる、非常に基本的なロガーのログレベル。
  #このロガーはログメッセージを標準出力(System.out)に出力します。
  #オプション:オフ、エラー、警告、情報、デバッグ
  stdout-loglevel = "WARNING"

  #アクターシステムの起動時に、完全な設定をINFOレベルで記録します。
  #これは、どの構成が使用されているのかわからない場合に役立ちます。
  log-config-on-start = off

  #メッセージが送達不能に送信されたときに、情報レベルでログを記録します。
  #可能な値:
  #on:すべての送達確認がログに記録されます
  #off:送達不能ログを記録しない
  #n:正の整数、ログに記録される送達不能文字数
  log-config-on-start = 10


  #アクターシステム中にデッドレターの記録をオフにする可能性
  #シャットダウン中です。ログ記録は 'log-dead-letters'によって有効にされた場合にのみ行われます
  #設定
  log-dead-letters-during-shutdown = on

  #アクターシステムの起動時にロードされる拡張機能のFQCNを一覧表示します。
  #ライブラリエクステンションは、起動時にロードされる通常のエクステンションです。
  #サードパーティのライブラリ作成者が拡張機能の自動ロードを有効にする場合に利用可能
  #クラスパスに存在します。これはエントリを追加することによって行われます。
  ライブラリ `reference.conf`の# 'library-extensions + =" Extension "'。
  #
  # 'application.conf'のエンドユーザアプリケーションによって設定されるべきではありません、そのために拡張プロパティを使用してください
  #
  library-extensions = $ {?akka.library-extensions} ["akka.serialization.SerializationExtension"]

  #アクターシステムの起動時にロードされる拡張機能のFQCNを一覧表示します。
  #「extensions = ["foo"、 "bar"] 'などの形式にします。
  #エクステンションの詳細についてはAkkaのドキュメントを参照してください。
  extensions = []

  #このActorSystemによって作成されたスレッドをデーモンにするかどうかを切り替えます
  daemonic = off

  致命的なエラーが発生した場合、#JVMシャットダウン、System.exit(-1)、
  #OutOfMemoryErrorなど
  jvm-exit-on-fatal-error = on

  #AkkaはデフォルトでJVMシャットダウンフックをインストールします。 CoordinatedShutdownとArteryで。この物件は
  #CoordinatedShutdown#addCancellableJvmShutdownHookを使って登録されたユーザー提供のフックを無効にしません。
  #このプロパティは、下記の `akka.coordinated-shutdown.run-by-jvm-shutdown-hook`に関連しています。
  #このプロパティは、アプリケーション自体であれば、そのようなフックをすべて無効にすることを可能にします。
  #またはPlayのようなより高いレベルのフレームワークはJVMシャットダウンフックをインストールすることを好みます
  #CoordinatedShutdownを使用するかどうかにかかわらず、ActorSystem自体を終了します。
  jvm-shutdown-hooks = on

  actor {

    # "local"、 "remote"、 "cluster"のいずれか、または使用するActorRefProviderの#FQCN。以下が組み込みのデフォルトです。
    # "remote"と "cluster"にはakka-remoteとakka-clusterが必要です。
    #クラスパス上に存在するアーティファクト。
    provider = "local"

    #保護者 "/ user"はこのクラスを使用してsupervisorStrategyを取得します。
    #akka.actor.SupervisorStrategyConfiguratorのサブクラスである必要があります。
    #デフォルトに加えてakka.actor.StoppingSupervisorStrategyがあります。
    guardian-supervisor-strategy = "akka.actor.DefaultSupervisorStrategy"

    #ActorSystem.actorOfのタイムアウト
    creation-timeout = 20秒

    #不変性を保証するために(非原始的な)メッセージをシリアライズおよびデシリアライズします。
    #これはテスト専用です。
    serialize-messages = off

    #allow-java-serializationが無効なときに自動的に有効になる追加のシリアル化バインディング。
    #設定が提供されています
    java-serialization-disabled-additional-serialization-bindings = {}

    #(Propsで)作成者をシリアライズし、逆シリアル化して、作成者を確実に
    #ネットワーク経由で送信されますが、これはテストのみを目的としています。純粋なローカル展開
    deploy.scope == LocalScopeのマークが付いた#は検証から除外されます。
    serialize-creators = off

    #処理中の最上位アクターへの送信操作のタイムアウト
    開始された数これは、制限付きメールボックスを使用する場合、または
    最上位のアクターの場合は#CallingThreadDispatcher。
    unstarted-push-timeout = 10秒

    typed {
      #void以外の戻り値の型を持つ型付きアクターメソッドのデフォルトタイムアウト
      timeout = 5s
    }

    #deployment.routerのショートネームから完全修飾クラス名へのマッピング
    router.type-mapping {
      from-code = "akka.routing.NoRouter"
      round-robin-pool = "akka.routing.RoundRobinPool"
      round-robin-group = "akka.routing.RoundRobinGroup"
      random-pool = "akka.routing.RandomPool"
      random-group = "akka.routing.RandomGroup"
      balanced-pool = "akka.routing.BalancingPool"
      minimum-mailbox-pool = "akka.routing.SmallestMailboxPool"
      broadcast-pool = "akka.routing.BroadcastPool"
      broadcast-group = "akka.routing.BroadcastGroup"
      scatter-gather-pool = "akka.routing.ScatterGatherFirstCompletedPool"
      scatter-gather-group = "akka.routing.ScatterGatherFirstCompletedGroup"
      tail-chopping-pool = "akka.routing.TailChoppingPool"
      tail-chopping-group = "akka.routing.TailChoppingGroup"
      consistent-hashing-pool = "akka.routing.ConsistentHashingPool"
      consistent-hashing-group = "akka.routing.ConsistentHashingGroup"
    }

    deployment {

      #デプロイメントIDパターン - 形式:/ parent / childなど
      default {

        #このアクターに使用するディスパッチャーのID。
        #コードで指定されたディスパッチャが未定義または空の場合
        #(Props.withDispatcher)が使用されます。使用されない場合はdefault-dispatcher
        #まったく指定されていません。
        dispatcher = ""

        #このアクターに使用するメールボックスのID。
        #未設定または空の場合、設定されたディスパッチャのデフォルトメールボックス
        #が使用されるか、メールボックスが指定されていない場合はメールボックスが指定されます。
        コード内の#(Props.withMailbox)が使用されます。
        #設定されたディスパッチャにメールボックスが定義されている場合
        #この設定を上書きします。
        mailbox = ""

        使用する#ルーティング(ロードバランス)方式
        # - available "from-code"、 "ラウンドロビン"、 "ランダム"、 "最小メールボックス"、
        #             "スキャッタギャザー"、 "ブロードキャスト"
        # - or:      ルータークラスの完全修飾クラス名。
        #             クラスはakka.routing.CustomRouterConfigと
        #             com.typesafe.config.Configを使ってパブリックコンストラクタを持っている
        #             およびオプションのakka.actor.DynamicAccessパラメータ。
        # - デフォルトは "from-code"です。
        #アクターがルーターに変換されるかどうかはコードで決まります
        #のみ(Props.withRouter)ルーターの種類は、で上書きすることができます。
        #設定。 "from-code"を指定することは、指定された値が意味することを意味します
        #コード内の#を使用します。
        #ルーティングの場合、ルーティング先のアクターを指定できます
        #いくつかの方法で:
        # -  nr-of-instances:たくさんの子を作成します
        # -  routees.paths:ActorSelectionを使用してメッセージをこれらのパスにルーティングします。
        #つまり子を作成しません
        # -  resizer:で指定されたように動的にサイズ変更可能なルート数
        下記のリサイズ
        router = "from-code"

        #ルータの場合に作成する子の数。
        #routees.pathsが与えられている場合、この設定は無視されます。
        nr-of-instances = 1

        #withinは将来の呼び出しを含むルーターに使用されるタイムアウトです。
        within = 5 seconds

        コンシステントハッシングルータのノードあたりの仮想ノード数
        virtual-nodes-factor = 10

        tail-chopping-router {
          #間隔は、次の経路にメッセージを送信する間隔です。
          interval = 10 milliseconds
        }

        routees {
          #nr-of-instancesを指定する代わりに、fullを指定することもできます。
          ルーティングされるべきアクターのパス。この設定は
          #nr-of-instancesよりも優先
          paths = []
        }

        #プールのルートに専用のディスパッチャを使用するには
        #プロパティ名でインラインでディスパッチャ設定を定義する
        #ルーターの展開セクションにある 'pool-dispatcher'。
        # 例えば:
        #pool-dispatcher {
        #fork-join-executor.parallelism-min = 5
        #fork-join-executor.parallelism-max = 5
        #}

        動的にサイズ変更可能な数のルートを持つルーター。この機能は
        #このセクション(の一部)をデプロイメントに含めることで有効になります。
        resizer {

          enabled = off

          #ルーターが持つべきルートの数が最も少ない。
          lower-bound = 1

          #ルータがこれまでに持つべきルートの最大数。
          #下限以上でなければなりません。
          upper-bound = 10

          #経路がビジーであると見なされるかどうかを評価するために使用されるしきい値
          #(under pressure)実装はこの値に依存します(デフォルトは1)。
          #※0:現在メッセージを処理している経路数
          #※1:現在メッセージを処理している経路数
          #     メールボックスにいくつかのメッセージがあります。
          #> 1:設定された最低しきい値を持つルートの数
          #メールボックス内のメッセージ数メールボックスのサイズの見積もり
          #default UnboundedMailboxはO(N)操作です。
          pressure-threshold = 1

          #すべての経路が混雑しているときに容量を増やす割合。
          #例えば、0.2は20%増加します(切り上げ)、すなわち現在の場合
          #capacityは6です。それはさらに2ルートの増加を要求するでしょう。
          rampup-rate = 0.2

          #バックオフする前の混雑したルートの最小割合。
          #例えば、これが0.3の場合、いくつかの経路を削除します。
          #30%未満のルートが混雑しています。つまり、現在のキャパシティが10で、
          #3がビジーであれば容量は変わりませんが、2以下でビジーであれば
          #容量が減少します。
          #ルートの削除を回避するには、0.0または負の値を使用してください。
          backoff-threshold = 0.3

          #resizerがに到達したときに削除されるルートの割合
          #backoffThreshold。
          #例えば、0.1は10%減少します(切り上げ)、つまり現在の場合
          #容量が9の場合、1ルートの減少が要求されます。
          backoff-rate = 0.1

          #サイズ変更操作間のメッセージ数。
          #各メッセージの前にサイズ変更するには1を使用します。
          messages-per-resize = 10
        }

        #に基づいて動的にサイズ変更可能な数のルートを持つルーター
        #パフォーマンス指標
        #この機能は、このセクション(の一部)を
        #デプロイメント、デフォルトのリサイズと一緒に有効にすることはできません。
        optimal-size-exploring-resizer {

          enabled = off

          #ルーターが持つべきルートの数が最も少ない。
          lower-bound = 1

          #ルータがこれまでに持つべきルートの最大数。
          #下限以上でなければなりません。
          upper-bound = 10

          #すべてのルートが混雑しているときにランプダウンする確率
          #探査中です。
          chance-of-ramping-down-when-full = 0.2

          #各サイズ変更試行間の間隔
          action-interval = 5s

          #ルートが十分に活用されていない場合(つまり、すべてのルートが混雑している場合)
          #そのような長さの場合、リサイズはプールを縮小します。
          downsize-after-underutilized-for = 72h

          #継続時間の探査、最大ステップサイズと
          #現在のプールサイズ例えば。現在のプールサイズが50の場合
          #explore-step-sizeは0.1、最大プールサイズの変更中です。
          #探査は+  -  5になります
          explore-step-size = 0.1

          #探査を行う確率。最適化
          chance-of-exploration = 0.4

          #十分に活用されていない列を縮小した後にサイズ変更する場合
          #プールを最大使用率の倍数に縮小します。
          #縮小率。この縮小率が新しいプールサイズを決定します
          最高使用率と比較して#。
          #例最大使用率が10の場合、およびダウンサイズ比
          #が0.8の場合、プールは8に縮小されます。
          downsize-ratio = 0.8

          #最適化するとき、リサイザは次のものに隣接するサイズのみを考慮します。
          #現在のサイズこの数は、いくつの隣接サイズを考慮するべきかを示します。
          optimization-range = 16

          #収集時の古いメトリクスに対する最新のメトリクスの重み
          #パフォーマンス指標
          #例最後の処理速度がプールでのメッセージごとに10ミリ秒の場合
          #サイズ5、および収集された新しい処理速度が6ミリである場合
          #プールサイズ5のメッセージ。重みが0.3の場合、メトリックは
          プールサイズ5を表す#は6 * 0.3 + 10 * 0.7、つまり8.8ミリになります。
          #明らかに、この数は0から1の間であるべきです。
          weight-of-latest-metric = 0.5
        }
      }

      "/ IO-DNS / inet-address" {
        mailbox = "unbounded"
        router = "consistent-hashing-pool"
        nr-of-instances = 4
      }

      "/ IO-DNS / inet-address / *" {
        dispatcher = "akka.actor.default-blocking-io-dispatcher"
      }

      "/ IO-DNS / async-dns" {
        mailbox = "unbounded"
        router = "round-robin-pool"
        nr-of-instances = 1
      }
    }

    default-dispatcher {
      #以下のいずれかでなければなりません
      継承しているクラスへの#Dispatcher、PinnedDispatcher、またはFQCN
      #MessageDispatcherConfiguratorとパブリックコンストラクタ
      #com.typesafe.config.Configパラメータと
      #akka.dispatch.DispatcherPrerequisitesパラメータ
      #PinnedDispatcherはexecutor = thread-pool-executorと一緒に使用する必要があります。
      type = "Dispatcher"

      #このディスパッチャに使用するExecutorServiceの種類
      #有効なオプション:
      # -  "default-executor"には "default-executor"セクションが必要です
      # -  "fork-join-executor"には "fork-join-executor"セクションが必要です
      # -  "thread-pool-executor"には "thread-pool-executor"セクションが必要です
      # -  "affinity-pool-executor"には "affinity-pool-executor"セクションが必要です
      # -  ExecutorServiceConfiguratorを拡張するクラスのFQCN
      executor = "default-executor"

      #これは "executor =" default-executor ""を設定している場合に使用されます。
      #与えられたExecutionContextでActorSystemが作成された場合、これは
      #ExecutionContextは、すべてのユーザーのデフォルトのexecutorとして使用されます。
      で設定されたActorSystemの#ディスパッチャ
      #executor = "default-executor"。 「default-executor」に注意してください。
      #はexecutorのデフォルト値なので、そうでない場合に使用されます。
      それ以外の場合は#を指定します。 ExecutionContextが指定されていない場合は、
      # "fallback"で設定されたexecutorが使用されます。
      default-executor {
        fallback = "fork-join-executor"
      }

      # "executor =" affinity-pool-executor ""を設定している場合に使用されます。
      #根底にあるスレッドプール実装はakka.dispatch.affinity.AffinityPoolです。
      #このエグゼキュータは "ApiMayChange"に分類されます。
      affinity-pool-executor {
        #ファクタベースの並列処理数を上限とするスレッドの最小数
        parallelism-min = 4

        #並列度はスレッドプールのサイズを決定するために使用されます。
        #次式:ceil(利用可能なプロセッサ数*要素)結果のサイズ
        #はparallelism-minおよびparallelism-maxの値で囲まれます。
        parallelism-factor = 0.8

        ファクタベースの並列処理数を上限とする最大スレッド数。
        parallelism-max = 64
        
        #プール内の各ワーカーは、個別の境界MPSCキューを使用します。この値
        #はキューの上限を示します。エンキューしようとするたびに
        #タスクが作成され、キューに収容できる容量がありません
        #タスク、指定された拒否ハンドラによって作成された拒否ハンドラ
        "rejection-handler"の#が呼び出されます。
        task-queue-size = 512

        プールで使用される拒否ハンドラの#FQCN。
        #空のパブリックコンストラクタが必要です
        #akka.actor.affinity.RejectionHandlerFactoryを実装します。
        rejection-handler = "akka.dispatch.affinity.ThrowOnOverflowRejectionHandler"

        #バックオフ/アイドル中に使用されたCPU時間のレベル(1〜10のスケール)。
        #トレードオフは、待ち時間を短くするためには、より多くのCPU時間を使用する必要があることです
        #受信メッセージにすばやく反応したり、送信後できるだけ早く送信することができます。
        #バックオフ背圧。
        #Level 1は低レイテンシよりも低CPU消費を強く望みます。
        #Level 10は、低CPU消費よりも低レイテンシを強く望みます。
        idle-cpu-level = 5

        #akka.dispatch.affinity.QueueSelectorFactoryの#FQCN。
        #FQCNのクラスは、パブリックコンストラクタを持つ必要があります。
        #(com.typesafe.config.Config)パラメータ
        #QueueSelectorFactoryはakka.dispatch.affinity.QueueSelectorのインスタンスを作成します。
        #これはRunnableがどのタスクキューに入れられるべきかを決定する責任があります。
        queue-selector = "akka.dispatch.affinity.FairDistributionHashCache"

        # "akka.dispatch.affinity.FairDistributionHashCache"キューセレクタを使用する場合
        #内部的にAffinityPoolは2つの方法を使ってどのタスクを決定するか
        #Runnableを割り当てるキュー:
        # - マップベース - ラウンドロビンカウンターとRunnableのマップを維持します。
        #それらが関連付けられているキューへのハッシュコード。これにより、
        #仕事の配分に関して最大​​の公平性、つまり各労働者が
        #実行するメールボックスの数はほぼ同じになります。これは適しています
        #予定されている俳優の数が少ない場合
        #プールと私たちは最大限の利用率を確保したい
        #利用可能なスレッド
        # - ハッシュベース - タスク - ランナブルが行くべきキューが決定される
        #を使用するハッシュ関数にintに一様に分散されたintを使用することによって
        #入力としてRunnableのハッシュコード。これは私達が
        #統計的に統一するために十分な数の異なるアクターがいる
        #スレッド間での作業の分配、または私たちは
        #これは、マップ検索を回避するという追加の利点のためです。
        fair-work-distribution {
          #この値はしきい値として機能します。
          #poolは、最初の作業配分方式から2番目の作業配分方式に切り替えます。
          #たとえば、値が128に設定されている場合、プールは最大で監視できます。
          #128のユニークな俳優とマップベースを使って自分のメールボックスをスケジュールします
          #アプローチ。この数に達すると、プールはハッシュベースに切り替わります。
          #タスク配布モード。値が0に設定されている場合、マップベース
          #作品分配アプローチは無効であり、ハッシュベースのみが
          #ユニークアクターの数に関係なく使用されます。有効範囲は
          #0〜2048(両端を含む)
          threshold = 128
        }
      }

      # "executor =" fork-join-executor ""を設定している場合に使用されます。
      #根底にあるスレッドプールの実装はakka.dispatch.forkjoin.ForkJoinPoolです。
      fork-join-executor {
        #ファクタベースの並列処理数を上限とするスレッドの最小数
        parallelism-min = 8

        #並列度はスレッドプールのサイズを決定するために使用されます。
        #次式:ceil(利用可能なプロセッサ数*要素)結果のサイズ
        #はparallelism-minおよびparallelism-maxの値で囲まれます。
        parallelism-factor = 3.0

        ファクタベースの並列処理数を上限とする最大スレッド数
        parallelism-max = 64

        # "poll"または "LIFO"がスタックを使用するピークモードのようにキューを使用するには "FIFO"に設定
        #ピークモードのように "ポップ"します。
        task-peeking-mode = "FIFO"
      }

      # "executor =" thread-pool-executor ""を設定している場合に使用されます。
      #根底にあるスレッドプールの実装はjava.util.concurrent.ThreadPoolExecutorです。
      thread-pool-executor {
        #スレッドの存続時間を確保
        keep-alive-time = 60s

        #このプロパティで固定スレッドプールサイズを定義します。 corePoolSize
        ThreadPoolExecutorの#とmaximumPoolSizeはこれに設定されます
        #value(定義されている場合)それから他のプールサイズの特性はそうしません
        # 利用される。
        #
        #有効な値は `off`または正の整数です。
        fixed-pool-size = off

        ファクタベースのcorePoolSize数を上限とするスレッドの最小数
        core-pool-size-min = 8

        #core-pool-size-factorは、のcorePoolSizeを決定するために使用されます。
        #次の式を使用して#ThreadPoolExecutor:
        #ceil(利用可能なプロセッサ*係数)
        #結果のサイズは、core-pool-size-minによって制限されます。
        #core-pool-size-maxの値
        core-pool-size-factor = 3.0

        ファクタベースのcorePoolSize数を上限とするスレッドの最大数
        core-pool-size-max = 64

        ファクタベースのmaximumPoolSize数を上限にするスレッドの最小数
        max-pool-size-min = 8

        #max-pool-size-factorは、最大プールサイズの決定に使用されます。
        #次の式を使用して#ThreadPoolExecutor:
        #ceil(利用可能なプロセッサ*要素)
        #maximumPoolSizeはcorePoolSizeより小さくありません。
        #有界タスクキューを使用する場合にのみ使用されます。
        max-pool-size-factor  = 3.0

        ファクタベースの最大スレッド数の上限
        max-pool-size-max = 64

        タスクキューの制限容量を指定します(<1 ==制限なし)。
        task-queue-size = -1

        #どのタイプのタスクキューを使用するかを指定します。 "array"または "array"のどちらかです。
        # "リンク"(デフォルト)
        task-queue-type = "linked"

        #コアスレッドをタイムアウトさせる
        allow-core-timeout = on
      }

      #ディスパッチャがシャットダウンするまで新しいアクターを待つ時間
      shutdown-timeout = 1秒

      #スループットは、バッチで処理されるメッセージ数を定義します。
      スレッドがプールに返される前。できるだけ公平にするには1に設定します。
      throughput = 5

      #ディスパッチャーのスループット期限。0に設定するか、期限がない場合は負に設定します。
      throughput-deadline-time = 0ms

      #BalancingDispatcherの場合:BalancingDispatcherが、
      #メッセージが到着したときにアイドル状態のアクターを同じディスパッチャを使ってスケジュールする。
      #そしてディスパッチャExecutorServiceはすでに完全にビジーではありません。
      attempt-teamwork = on

      #このディスパッチャが特定の種類のメールボックスを必要とする場合は、
      #完全修飾クラス名はこちら。実際に作成されたメールボックスは
      #このタイプのサブタイプになります。空の文字列は要件がないことを意味します。
      mailbox-requirements = ""
    }

    default-blocking-io-dispatcher {
      type = "Dispatcher"
      executor = "thread-pool-executor"
      throughput = 1

      thread-pool-executor {
        fixed-pool-size = 16
      }
    }

    default-mailbox {
      MailboxTypeの#FQCN。 FQCNのクラスは公衆を持っている必要があります
      #コンストラクタ
      #(akka.actor.ActorSystem.Settings、com.typesafe.config.Config)パラメータ
      mailbox-type = "akka.dispatch.UnboundedMailbox"

      #メールボックスが制限されている場合は、この設定を使用してメールボックスを決定します。
      #容量提供された値は正でなければなりません。
      #注意:
      #バージョン2.1までは、メールボックスの種類はこの設定に基づいて決定されていました。
      #これはもはや当てはまりません。型は明示的に境界付きメールボックスでなければなりません。
      mailbox-capacity = 1000

      #メールボックスが制限されている場合、これはエンキューのタイムアウトです
      #メールボックスがいっぱいの場合負の値は無限大を意味します
      #タイムアウト、これはデッドロックの危険性があるので避けるべきです。
      mailbox-push-timeout-time = 10s

      #StashのあるActorの場合:stashのデフォルト容量。
      #負(またはゼロ)の場合、無制限の隠し文字が使用されます(デフォルト)
      #正の場合は、境界付きスタッシュが使用され、容量はを使用して設定されます。
      #プロパティ
      stash-capacity = -1
    }

    mailbox {
      #メッセージキューのセマンティクスとメールボックス設定間のマッピング。
      #akka.dispatch.RequiresMessageQueue [T]で異なるを強制するために使用されます。
      #アクターのメールボックスタイプ。
      #あなたのアクターがRequiresMessageQueue [T]を実装している場合、あなたが作成したとき
      #そのアクターのインスタンス、そのメールボックスのタイプは見て決定されます
      #このマッピングでTを使ってメールボックス設定をupする
      requirements {
        "akka.dispatch.UnboundedMessageQueueSemantics" =
          akka.actor.mailbox.unbounded-queue-based
        "akka.dispatch.BoundedMessageQueueSemantics" =
          akka.actor.mailbox.bounded-queue-based
        "akka.dispatch.DequeBasedMessageQueueSemantics" =
          akka.actor.mailbox.unbounded-deque-based
        "akka.dispatch.UnboundedDequeBasedMessageQueueSemantics" =
          akka.actor.mailbox.unbounded-deque-based
        "akka.dispatch.BoundedDequeBasedMessageQueueSemantics" =
          akka.actor.mailbox.bounded-deque-based
        "akka.dispatch.MultipleConsumerSemantics" =
          akka.actor.mailbox.unbounded-queue-based
        "akka.dispatch.ControlAwareMessageQueueSemantics" =
          akka.actor.mailbox.unbounded-control-aware-queue-based
        "akka.dispatch.UnboundedControlAwareMessageQueueSemantics" =
          akka.actor.mailbox.unbounded-control-aware-queue-based
        "akka.dispatch.BoundedControlAwareMessageQueueSemantics" =
          akka.actor.mailbox.bounded-control-aware-queue-based
        "akka.event.LoggerMessageQueueSemantics" =
          akka.actor.mailbox.logger-queue
      }

      unbounded-queue-based {
        MailboxTypeの#FQCN、FQCNのクラスはパブリックを持つ必要があります
        (akka.actor.ActorSystem.Settingsを持つ#コンストラクタ、
        #com.typesafe.config.Config)パラメータ
        mailbox-type = "akka.dispatch.UnboundedMailbox"
      }

      bounded-queue-based {
        MailboxTypeの#FQCN、FQCNのクラスはパブリックを持つ必要があります
        (akka.actor.ActorSystem.Settingsを持つ#コンストラクタ、
        #com.typesafe.config.Config)パラメータ
        mailbox-type = "akka.dispatch.BoundedMailbox"
      }

      unbounded-deque-based {
        MailboxTypeの#FQCN、FQCNのクラスはパブリックを持つ必要があります
        (akka.actor.ActorSystem.Settingsを持つ#コンストラクタ、
        #com.typesafe.config.Config)パラメータ
        mailbox-type = "akka.dispatch.UnboundedDequeBasedMailbox"
      }

      bounded-deque-based {
        MailboxTypeの#FQCN、FQCNのクラスはパブリックを持つ必要があります
        (akka.actor.ActorSystem.Settingsを持つ#コンストラクタ、
        #com.typesafe.config.Config)パラメータ
        mailbox-type = "akka.dispatch.BoundedDequeBasedMailbox"
      }

      unbounded-control-aware-queue-based {
        MailboxTypeの#FQCN、FQCNのクラスはパブリックを持つ必要があります
        (akka.actor.ActorSystem.Settingsを持つ#コンストラクタ、
        #com.typesafe.config.Config)パラメータ
        mailbox-type = "akka.dispatch.UnboundedControlAwareMailbox"
      }

      bounded-control-aware-queue-based {
        MailboxTypeの#FQCN、FQCNのクラスはパブリックを持つ必要があります
        (akka.actor.ActorSystem.Settingsを持つ#コンストラクタ、
        #com.typesafe.config.Config)パラメータ
        mailbox-type = "akka.dispatch.BoundedControlAwareMailbox"
      }

      #LoggerMailboxはメールボックス内のすべてのメッセージを排出します
      #システムがシャットダウンされてStandardOutLoggerに配信されたとき。
      #自分がしていることが分からない限り、これを変更しないでください。
      logger-queue {
        mailbox-type = "akka.event.LoggerMailboxType"
      }
    }

    debug {
      #Actor.loggable()の機能を有効にします。受信したメッセージを記録します。
      #DEBUGレベルでは、Akkaの“ Testing Actor Systems”セクションを参照してください。
      #http://akka.io/docsにあるドキュメント
      receive = off

      #すべてのAutoReceiveMessage(Kill、PoisonPillなど)のDEBUGロギングを有効にします。
      autoreceive = off

      #アクターライフサイクルの変更のデバッグログを有効にする
      lifecycle = off

      #イベント、遷移、タイマーについて、すべてのLoggingFSMのDEBUGロギングを有効にします。
      fsm = off

      #eventStreamのサブスクリプション変更のデバッグログを有効にする
      event-stream = off

      #未処理のメッセージのデバッグログを有効にする
      unhandled = off

      #設定ミスのルータのWARNロギングを有効にする
      router-misconfiguration = off
    }

    #SECURITY BEST-PRACTICEは、その倍数に対してJavaシリアライゼーションを無効にすることです。
    #既知の攻撃面
    #
    #この設定はショートカットです
    # -  JavaSerializerの代わりにDisabledJavaSerializerを使用する
    # -  enable-additional-serialization-bindings = on
    #
    #による完全に `akka.serialization.JavaSerialization`の使用を無効にします
    #Akkaシリアライゼーション拡張、代わりにDisabledJavaSerializerはJavaシリアライゼーションを使用しようとすると明示的に失敗します。
    #
    #そのようなシリアライザによって発行されたログメッセージは潜在的なものとして扱われるべきです(SHOULD)。
    #外部演算子を示している可能性があるため、シリアライザが防止した攻撃
    #攻撃方法としてJavaシリアライゼーションを使用しようとする悪意のあるメッセージを送信しようとしている。
    #試みはセキュリティマーカーで記録されます。
    #
    #このオプションは、手動でJavaシリアライゼーションを起動することを妨げるものではありません。
    #
    #これのデフォルト値はAkkaの将来のバージョンでoffに変更されるかもしれません。
    allow-java-serialization = on

    #プラグイン可能なシリアライザとそのバインディングのエントリ。
    serializers {
      java = "akka.serialization.JavaSerializer"
      bytes = "akka.serialization.ByteArraySerializer"
    }

    #クラスからシリアライザへのバインディング。あなただけの名前を指定する必要があります
    #メッセージのインターフェースまたは抽象基本クラス。あいまいさの場合は
    #最も具体的な設定済みクラスを使用しているか、警告を表示しています
    #最初のものを選択する。
    #
    #デフォルトのシリアライザを無効にするには、次のようにそのクラスを "none"に割り当てます。
    # "java.io.Serializable" = none
    serialization-bindings {
      "[B" =バイト
      "java.io.Serializable" = java
    }

    #Javaシリアライゼーションを置き換えている追加のシリアライゼーションバインディングは
    #このセクションで定義された後方互換性の理由で。含まれています
    #デフォルトで、Akka 2.4.xとの後方互換性のために除外することができます。
    #それらはenable-additional-serialization-bindings = offで無効にできます。
    #
    #これは後方互換性のためだけに必要です。
    enable-additional-serialization-bindings = on

    #Javaシリアライゼーションを置き換えている追加のシリアライゼーションバインディングは
    #後方互換性のためにこのセクションで定義されています。含まれていますデフォルトで
    #ですが、Akka 2.4.xとの後方互換性のために除外することができます。
    #それらはenable-additional-serialization-bindings = offで無効にできます。
    additional-serialization-bindings {
    }

    #デフォルトのJavaシリアライゼーションを使用してメッセージをシリアライズするときに警告をログに記録します。
    #デフォルトのシリアライザはJavaのシリアライゼーションを使います。
    #パフォーマンスを気にしないのでなければ、実稼働環境で使用してください。その場合
    #これをオフにすることができます。
    warn-about-java-serializer-usage = on

    #上記のwarn-about-java-serializer-usageとともに使用する
    #warn-about-java-serializer-usage = onで、かつこのwarn-on-no-serialization-verification = offの場合、
    NoSerializationVerificationNeededを拡張するクラスの#警告は抑制されます
    #ノイズを減らす。
    warn-on-no-serialization-verification = on

    #シリアル化識別子の設定ネームスペース。
    #各シリアライザの実装には、次の形式のエントリが必要です。
    # `akka.actor.serialization-identifier。" FQCN "= ID`
    #FQCNはシリアライザ実装の完全修飾クラス名です。
    #と `ID`はグローバルにユニークなシリアライザの識別番号です。
    #0から40までの識別子値は、Akkaの内部使用のために予約されています。
    serialization-identifiers {
      "akka.serialization.JavaSerializer" = 1
      "akka.serialization.ByteArraySerializer" = 4
    }

    #akka.actor.ActorDSL._メソッドによって使用される設定項目
    dsl {
      #newInbox()によって作成されたアクターの最大キューサイズ。これは保護します
      #select()を使用し、一貫してメッセージを見逃すような不完全なプログラムに対して
      inbox-size = 1000

      #Inbox.receiveなどの操作を想定したデフォルトのタイムアウト
      default-timeout = 5s
    }
  }

  #スケジューラの動作を設定するために使用されます。
  #デフォルト値を変更するとシステムの動作が劇的に変わるかもしれないのでmake
  #あなたがしていることを確実に知っている! AkkaのSchedulerセクションを参照してください。
  #詳細はドキュメント。
  scheduler {
    #LightArrayRevolverSchedulerは、デフォルトのスケジューラとして使用されます。
    #システムスケジュールされたタスクを正確な時間に実行するのではなく、毎回実行します。
    #ダニ、それは(終わった)期限があるすべてを実行するでしょう。増減できます
    #小さいまたは大きいティックを指定することによって実行タイミングの正確さ
    #期間あなたがたくさんのタスクをスケジュールしているならば、あなたは増加を考慮すべきです
    #ホイールあたりの目盛り。
    #タイマーを止めるには最大1チックかかることに注意してください。
    #tick-durationが高い値になると、アクターシステムをシャットダウンします。
    #時間がかかります。
    tick-duration = 10ms

    #タイマーはタイマータスクを格納するためにバケツの輪を使用します。
    #これは、スケジュールされたタイムアウトの大部分が
    #スケジューリング頻度)はホイールの1回転より短くなります
    #(ティック/ホイール*ティック - デュレーション)
    #これは2の力でなければなりません!
    ticks-per-wheel = 512

    #この設定はロードされるタイマー実装を選択します
    #システムの起動
    #ここで与えられたクラスはakka.actor.Schedulerインターフェースを実装しなければなりません
    #そして、3つの引数を取るパブリックコンストラクタを提供します。
    #1)com.typesafe.config.Config
    #2)akka.event.LoggingAdapter
    #3)java.util.concurrent.ThreadFactory
    implementation = akka.actor.LightArrayRevolverScheduler

    #スケジューラをシャットダウンすると、通常は次のスレッドがあります。
    #停止する必要があり、このタイムアウトによって待機時間が決まります。
    #起こることタイムアウトの場合、アクターシステムのシャットダウンは
    #まだキューに入っている可能性があるタスクを実行せずに続行します。
    shutdown-timeout = 5秒
  }

  io {

    #デフォルトでは、selectループは専用スレッドで実行されます。
    #PinnedDispatcher
    pinned-dispatcher {
      type = "PinnedDispatcher"
      executor = "thread-pool-executor"
      thread-pool-executor.allow-core-timeout = off
    }

    tcp {

      #配信されたチャンネルをストライプするセレクターの数。それぞれの
      #これらはセレクタ - ディスパッチャで1つの選択ループを使用します。
      nr-of-selector = 1

      #このTCPモジュールでサポートされている最大オープンチャネル数。がある
      #本質的な一般的な制限はありません。この設定はDoSを有効にするためのものです。
      #同時に接続されているクライアントの数を制限して保護します。
      #これも「弱い」制限特定のケースでは、実装
      #設定された数より多いまたは少ない数の接続を受け入れます。
      # ここに。 0以上の整数または "無制限"でなければなりません。
      max-channels = 256000

      #セレクタに新しい接続を割り当てようとしたとき
      #セレクタは最大容量です。セレクタの選択と割り当てを再試行してください
      #これを何度もあきらめる前に
      selector-association-retries = 10

      #一度に受け入れられる接続の最大数
      #数値が大きいほど待ち時間が短くなり、数値が小さいほど公平性が向上します
      #ワーカーディスパッチャー
      batch-accept-limit = 10

      #読み取りまたは書き込みに使用されるプール内のダイレクトバッファあたりのバイト数
      #カーネルからのネットワークデータ。
      direct-buffer-size = 128 KiB

      #ダイレクトバッファプールに保持されるダイレクトバッファの最大数
      #再利用
      direct-buffer-pool-limit = 1000

      #接続アクターがからの「登録」メッセージを待つ期間
      #接続を中止する前にその指揮官。
      register-timeout = 5s

      # `Received`メッセージによって配信された最大バイト数。前
      #接続アクターが試みるネットワークからより多くのデータが読み取られる
      #他の仕事をする。
      #この設定の目的は、より小さな制限を課すことです。
      #受信バッファサイズを設定しました。値「無制限」を使用すると、それは
      #受信バッファからすべてを読み込もうとします。
      max-received-message-size = unlimited

      #実装内で起こっていることのきめ細かいロギングを可能にします。
      #これは、アクターに送信されたメッセージごとに複数回記録される可能性があることに注意してください。
      #TCPの実装の
      trace-logging = off

      #ディスパッチャ設定を保持する完全修飾設定パス
      #セレクタでselect()呼び出しを実行するために使用される
      selector-dispatcher = "akka.io.pinned-dispatcher"

      #ディスパッチャ設定を保持する完全修飾設定パス
      #読み取り/書き込みワーカーアクター用
      worker-dispatcher = "akka.actor.default-dispatcher"

      #ディスパッチャ設定を保持する完全修飾設定パス
      #セレクター管理アクター用の#
      management-dispatcher = "akka.actor.default-dispatcher"

      #ディスパッチャ設定を保持する完全修飾設定パス
      #どのファイルIOタスクがスケジュールされているか
      file-io-dispatcher = "akka.actor.default-blocking-io-dispatcher"

      #1つのバッチで転送する最大バイト数(または「無制限」)
      # `FileChannel.transferTo`を使う` WriteFile`コマンドを使うとき
      #ファイルをTCPソケットに転送します。 Linuxの `FileChannel.transferTo`のようないくつかのOSで
      #ネットワークIOがファイルIOより速い場合、長い間ブロックされるかもしれません。
      #値を小さくすると公平性が向上する一方、値を大きくすると向上する場合がある
      #スループット
      file-io-transferTo-limit = 512 KiB

      #通知された後に `finishConnect`呼び出しを再試行する回数
      #OP_CONNECT OP_CONNECT通知がそれを暗示していない場合は再試行が必要です
      # `finishConnect`は成功するでしょう、これはAndroidの場合です。
      finish-connect-retries = 5

      #Windowsでは、OP_READが指定されていない限り、接続の中断は確実に検出されません。
      #接続がリセットされた後にセレクタ_に登録されました。この
      #回避策はOP_CONNECTを有効にして、強制的にWindows上でアボートを表示させるようにします。
      #Windows以外のプラットフォームでこの設定を有効にすると、さまざまな障害が発生します。
      #未定義の振る舞い
      #このキーの有効な値はon、off、autoです。ここでautoは有効になります。
      #Windowsが自動的に検出された場合の回避策。
      windows-connection-abort-workaround-enabled = off
    }

    udp {

      #配信されたチャンネルをストライプするセレクターの数。それぞれの
      #これらはセレクタ - ディスパッチャで1つの選択ループを使用します。
      nr-of-selector = 1

      #このUDPモジュールでサポートされている最大オープンチャネル数
      #UDPは多数のチャネルを必要としないため、
      #この設定を低く抑えることをお勧めします。
      max-channels = 4096

      #選択ループは2つのモードで使用できます。
      # -  "infinite"を設定するとタイムアウトなしで選択され、スレッドを占有します
      # - 正のタイムアウトを設定すると、制限付き選択呼び出しが行われます。
      #複数のセレクタ間で単一スレッドの共有を可能にする
      #(この場合、別の設定を使用する必要があります。
      #selector-dispatcher、例えばサイズ1)で "type = Dispatcher"を使用する
      # - これをゼロに設定すると、ポーリング、つまりselectNow()の呼び出しを意味します。
      select-timeout = infinite

      #セレクタに新しい接続を割り当てようとしたとき
      #セレクタは最大容量です。セレクタの選択と割り当てを再試行してください
      #これを何度もあきらめる前に
      selector-association-retries = 10

      #マキシム一度に読み取られるデータグラムの数
      #数値が大きいほど待ち時間が短くなり、数値が小さいほど公平性が向上します
      #ワーカーディスパッチャー
      receive-throughput = 3

      #読み取りまたは書き込みに使用されるプール内のダイレクトバッファあたりのバイト数
      #カーネルからのネットワークデータ。
      direct-buffer-size = 128 KiB

      #ダイレクトバッファプールに保持されるダイレクトバッファの最大数
      #再利用
      direct-buffer-pool-limit = 1000

      #実装内で起こっていることのきめ細かいロギングを可能にします。
      #これは、アクターに送信されたメッセージごとに複数回記録される可能性があることに注意してください。
      TCPの実装の#
      trace-logging = off

      #ディスパッチャ設定を保持する完全修飾設定パス
      #セレクタでselect()呼び出しを実行するために使用される
      selector-dispatcher = "akka.io.pinned-dispatcher"

      #ディスパッチャ設定を保持する完全修飾設定パス
      #読み取り/書き込みワーカーアクター用
      worker-dispatcher = "akka.actor.default-dispatcher"

      #ディスパッチャ設定を保持する完全修飾設定パス
      #セレクター管理アクター用の
      management-dispatcher = "akka.actor.default-dispatcher"
    }

    udp-connected {

      #配信されたチャンネルをストライプするセレクターの数。それぞれの
      #これらはセレクタ - ディスパッチャで1つの選択ループを使用します。
      nr-of-selector = 1

      #このUDPモジュールでサポートされている最大オープンチャネル数
      #UDPは多数のチャネルを必要としないため、
      #この設定を低く抑えることをお勧めします。
      max-channels = 4096

      #選択ループは2つのモードで使用できます。
      # -  "infinite"を設定するとタイムアウトなしで選択され、スレッドを占有します
      # - 正のタイムアウトを設定すると、制限付き選択呼び出しが行われます。
      #複数のセレクタ間で単一スレッドの共有を可能にする
      #(この場合、別の設定を使用する必要があります。
      #selector-dispatcher、例えばサイズ1)で "type = Dispatcher"を使用する
      # - これをゼロに設定すると、ポーリング、つまりselectNow()の呼び出しを意味します。
      select-timeout = infinite

      #セレクタに新しい接続を割り当てようとしたとき
      #セレクタは最大容量です。セレクタの選択と割り当てを再試行してください
      #これを何度もあきらめる前に
      selector-association-retries = 10

      #一度に読み取られるデータグラムの最大数
      #数値が大きいほど待ち時間が短くなり、数値が小さいほど公平性が向上します
      #ワーカーディスパッチャー
      receive-throughput = 3

      #読み取りまたは書き込みに使用されるプール内のダイレクトバッファあたりのバイト数
      #カーネルからのネットワークデータ。
      direct-buffer-size = 128 KiB

      #ダイレクトバッファプールに保持されるダイレクトバッファの最大数
      #再利用
      direct-buffer-pool-limit = 1000

      #実装内で起こっていることのきめ細かいロギングを可能にします。
      #これは、アクターに送信されたメッセージごとに複数回記録される可能性があることに注意してください。
      TCPの実装の#
      trace-logging = off

      #ディスパッチャ設定を保持する完全修飾設定パス
      #セレクタでselect()呼び出しを実行するために使用される
      selector-dispatcher = "akka.io.pinned-dispatcher"

      #ディスパッチャ設定を保持する完全修飾設定パス
      #読み取り/書き込みワーカーアクター用
      worker-dispatcher = "akka.actor.default-dispatcher"

      #ディスパッチャ設定を保持する完全修飾設定パス
      #セレクター管理アクター用の
      management-dispatcher = "akka.actor.default-dispatcher"
    }

    dns {
      #ディスパッチャ設定を保持する完全修飾設定パス
      #マネージャとリゾルバのルータアクター用。
      #実際のルータ設定についてはakka.actor.deployment./IO-DNS/*をご覧ください。
      dispatcher = "akka.actor.default-dispatcher"

      #パスakka.io.dnsにあるサブ設定の名前。下記のinet-addressを参照してください。
      #新しい「ネイティブな」DNSリゾルバを使うために `async-dns`に変更してください。
      #これはSRVレコードを解決することもできます。
      resolver = "inet-address"

      #DNSレコードを解決するためにJava InetAddressを使用する、廃止予定のDNSリゾルバの実装。
      #DNSプロトコルをブロックせずにネイティブに実装している `akka.io.dns.async`に置き換えます(これはInetAddressのやり方です)
      inet-address {
        #akka.io.DnsProviderを実装する必要があります
        provider-object = "akka.io.InetAddressDnsProvider"

        #名前解決をキャッシュする時間を設定する
        #可能な値:
        #default:sun.net.InetAddressCachePolicy.get()およびgetNegative()
        #forever:永遠にキャッシュ
        #never:キャッシングなし
        #n [時間単位]:単位付きの正のタイムアウト、例えば "30秒"
        positive-ttl = default
        negative-ttl = default

        #期限切れのキャッシュエントリを消去する頻度。
        #この間隔はTTLとは無関係です。
        cache-cleanup-interval = 120s
      }

      async-dns {
        provider-object = "akka.io.dns.internal.AsyncDnsProvider"

        #DNS解決中に照会するようにネームサーバーを設定します。
        #デフォルトでJVMによって使用されるネームサーバにデフォルト設定されます。
        #サーバーを上書きするIPのリストを設定します。 Googleのサーバーの場合は["8.8.8.8"、 "8.8.4.4"]
        #複数が定義されている場合は、1つが応答するまで順番に試行されます。
        nameservers = default

        #リクエストが破棄されるまでに存続できる時間
        #返事はありません。この下限は常に金額であるべきです
        DNSサーバーが返信すると合理的に予想される時間の#
        #複数のネームサーバが提供されている場合、それぞれが試行する前に応答するのにこの時間がかかります
        # 次のもの
        resolve-timeout = 5秒

        #期限切れのキャッシュエントリを消去する頻度。
        #この間隔はTTLとは無関係です。
        cache-cleanup-interval = 120s

        #検索ドメインのリストを設定します。
        #システム依存のルックアップがデフォルトになります(OSのようなUnixでは、/ etc / resolv.confを解析しようとします)。
        #他のプラットフォームでは、検索ドメインを検索しようとしません。単一ドメインに設定する
        #ドメインのリスト、例えば["example.com"、 "example.net"]。
        search-domains = default

        #これより少ないドット数を持つホストは直接検索されず、代わりに検索されます。
        #検索ドメインが最初に試行されます。これは/etc/resolv.confのndotsオプションに対応します。
        詳細については、https://linux.die.net/man/5/resolverを参照してください。
        #システム依存のルックアップがデフォルトになります(OSのようなUnixでは、/ etc / resolv.confを解析しようとします)。
        他のプラットフォームでは、デフォルトで1)になります。
        ndots = default
      }
    }
  }


  #CoordinatedShutdownは登録を実行する拡張機能です。
  #フェーズによって定義された順序でタスクを実行します。開始されます
  #CoordinatedShutdown(system).run()を呼び出すことによって。これは引き起こすことができます
  #さまざまなことで、例えば:
  # -  JVMシャットダウンフックはデフォルトでCoordinatedShutdownを実行します
  # - クラスタノードはCoordinatedShutdownを自動的に実行します
  #自分自身を終了と見なします
  # - 管理コンソールまたはその他のアプリケーション固有のコマンド
  #run CoordinatedShutdownを実行します。
  coordinated-shutdown {
    #で指定されていない場合、フェーズに使用されるタイムアウト
    #フェーズの 'タイムアウト'
    default-phase-timeout = 5秒

    #最後のフェーズactor-system-terminateでActorSystemを終了します。
    terminate-actor-system = on

    #最後のフェーズでJVM(System.exit(0))を終了します。actor-system-terminate
    #これが 'on'に設定されている場合終了後に行われる
    terminate-actor-system = onの場合は#ActorSystem、それ以外の場合は行われます。
    #最後のフェーズに到達したらすぐに。
    exit-jvm = off

    #exit-jvmがonのときにSystem.exit(int)で使用する終了ステータス。
    exit-code = 0

    #JVMプロセスが終了したら、協調シャットダウンを実行します。
    #SIGTERMシグナルをkillする(SIGINT ctrl-cは機能しない)。
    #このプロパティは上記の `akka.jvm-shutdown-hooks`に関連しています。
    run-by-jvm-shutdown-hook = on

    #協調シャットダウンがトリガーされると、 `Reason`のインスタンスは
    #必須その値を使用してデフォルト設定を上書きできます。
    # 'exit-jvm'、 'exit-code'、 'terminate-actor-system'だけが可能です。
    #理由によっては上書きされます。
    reason-overrides {
      #オーバーライドは `reason.getClass.getName`を使って適用されます。
      # `Reason`がクラスタの場合は` exit-code`を上書きします
      #停止中またはクラスタへの参加失敗イベント
      "akka.actor.CoordinatedShutdown $ ClusterDowningReason $" {
        exit-code = -1
      }
      "akka.actor.CoordinatedShutdown $ ClusterJoinUnsuccessfulReason $" {
        exit-code = -1
      }
    }

    #//#調整シャットダウンフェーズ
    #CoordinatedShutdownはデフォルトで有効になっており、以下のタスクを実行します。
    #個々のAkkaモジュールとユーザーロジックによってこれらのフェーズに追加されます。
    #
    #フェーズ間の依存関係を定義することで、フェーズはDAGとして順序付けられます
    #シャットダウンタスクが正しい順序で実行されるようにします。
    #
    #一般的なユーザタスクは最初の数フェーズに属しますが、使用することもあります。
    #新しい段階でフックしたり、後でタスクを登録したい場合
    #DAG
    #
    #各フェーズは名前付き設定セクションとして定義されます。
    #以下のオプションのプロパティ:
    # -  timeout = 15s:このフェーズのdefault-phase-timeoutを上書きします。
    # -  recover = off:フェーズが失敗した場合、シャットダウンは中止されます。
    #および依存フェーズは実行されません。
    # -  enabled = off:この段階で登録されているすべてのタスクをスキップします。使ってはいけません
    #あなたが絶対に何を確信していない限り、
    #これはフェーズを無効にするために
    #結果はあります。組み込みタスクの多くは他のタスクに依存しています
    #以前のフェーズで実行されていて、無効になっていると壊れる可能性があります。
    #depends-on = []:与えられたフェーズの後にフェーズを実行する
    phases {

      #アプリケーションがタスクを追加できる最初の定義済みフェーズ。
      #もっと多くのフェーズをアプリケーションの中に追加できることに注意してください
      #このフェーズを追加でオーバーライドすることによる設定
      #に依存します。
      before-service-unbind {
      }

      #新しい着信接続を受け付けないようにします。
      #ここで、サーバーが新しい接続を受け付けなくなるようなタスクを登録できます。既に
      #確立された接続は可能なら継続して完了することを許可されるべきです。
      service-unbind {
        depends-on = [before-service-unbind]
      }

      #進行中の要求が完了するのを待ちます。
      #ここで、すでに確立されている接続が完了するのを待つタスクを登録します。
      #また、最初に閉鎖する時が来たことを伝えます。
      service-requests-done {
        depends-on = [service-unbind]
      }

      #サービスエンドポイントの最終シャットダウン。
      #これは、まだ残っている接続を強制的に削除するタスクを追加する場所です。
      service-stop {
        depends-on = [service-requests-done]
      }

      #実行するカスタムアプリケーションタスクのフェーズ
      #サービスのシャットダウン後、クラスタのシャットダウン前。
      before-cluster-shutdown {
        depends-on = [service-stop]
      }

      #クラスタ共有領域の正常なシャットダウン。
      #このフェーズは、ユーザーがタスクを追加するためのものではありません。
      cluster-sharding-shutdown-region {
        timeout = 10 s
        depends-on = [before-cluster-shutdown]
      }

      #シャットダウンしているノードに対してleaveコマンドを発行します。
      #このフェーズは、ユーザーがタスクを追加するためのものではありません。
      cluster-leave {
        depends-on = [cluster-sharding-shutdown-region]
      }

      #クラスタシングルトンをシャットダウンする
      #これは、シャード領域のシャットダウンが開始されるのを可能にするために、できるだけ遅く行われます。
      #シャードコーディネータがシャットダウンされる前に完了する "cluster-sharding-shutdown-region"フェーズ。
      #このフェーズは、ユーザーがタスクを追加するためのものではありません。
      cluster-exiting {
        timeout = 10 s
        depends-on = [cluster-leave]
      }

      #終了が完了するまで待つ
      #このフェーズは、ユーザーがタスクを追加するためのものではありません。
      cluster-exiting-done {
        depends-on = [cluster-exiting]
      }

      #クラスタ拡張をシャットダウンする
      #このフェーズは、ユーザーがタスクを追加するためのものではありません。
      cluster-shutdown {
        depends-on = [cluster-exiting-done]
      }

      #実行するカスタムアプリケーションタスクのフェーズ
      #クラスタシャットダウン後、ActorSystem終了前。
      before-actor-system-terminate {
        depends-on = [cluster-shutdown]
      }

      #最後の段階。上記のterminate-actor-systemおよびexit-jvmを参照してください。
      #このフェーズに依存するフェーズを追加しないでください。
      ActorSystemの#ディスパッチャとスケジューラがシャットダウンされました。
      #このフェーズは、ユーザーがタスクを追加するためのものではありません。
      actor-system-terminate {
        timeout = 10 s
        depends-on = [before-actor-system-terminate]
      }
    }
    #//#coordinated-shutdown-phases
  }

}