1 ####################################
2 # Akka Actor Reference Config File #
3 ####################################
5 # This is the reference config file that contains all the default settings.
6 # Make your edits/overrides in your application.conf.
8 # Akka version, checked against the runtime version of Akka. Loaded from generated conf file.
12 # Home directory of Akka, modules in the deploy directory will be loaded
15 # Loggers to register at boot time (akka.event.Logging$DefaultLogger logs
17 loggers = ["akka.event.Logging$DefaultLogger"]
19 # Filter of log events that is used by the LoggingAdapter before
20 # publishing log events to the eventStream. It can perform
21 # fine grained filtering based on the log source. The default
22 # implementation filters on the `loglevel`.
23 # FQCN of the LoggingFilter. The Class of the FQCN must implement
24 # akka.event.LoggingFilter and have a public constructor with
25 # (akka.actor.ActorSystem.Settings, akka.event.EventStream) parameters.
26 logging-filter = "akka.event.DefaultLoggingFilter"
28 # Specifies the default loggers dispatcher
29 loggers-dispatcher = "akka.actor.default-dispatcher"
31 # Loggers are created and registered synchronously during ActorSystem
32 # start-up, and since they are actors, this timeout is used to bound the
34 logger-startup-timeout = 5s
36 # Log level used by the configured loggers (see "loggers") as soon
37 # as they have been started; before that, see "stdout-loglevel"
38 # Options: OFF, ERROR, WARNING, INFO, DEBUG
41 # Log level for the very basic logger activated during ActorSystem startup.
42 # This logger prints the log messages to stdout (System.out).
43 # Options: OFF, ERROR, WARNING, INFO, DEBUG
44 stdout-loglevel = "WARNING"
46 # Log the complete configuration at INFO level when the actor system is started.
47 # This is useful when you are uncertain of what configuration is used.
48 log-config-on-start = off
50 # Log at info level when messages are sent to dead letters.
52 # on: all dead letters are logged
53 # off: no logging of dead letters
54 # n: positive integer, number of dead letters that will be logged
57 # Possibility to turn off logging of dead letters while the actor system
58 # is shutting down. Logging is only done when enabled by 'log-dead-letters'
60 log-dead-letters-during-shutdown = on
62 # List FQCN of extensions which shall be loaded at actor system startup.
63 # Library extensions are regular extensions that are loaded at startup and are
64 # available for third party library authors to enable auto-loading of extensions when
65 # present on the classpath. This is done by appending entries:
66 # 'library-extensions += "Extension"' in the library `reference.conf`.
68 # Should not be set by end user applications in 'application.conf', use the extensions property for that
70 library-extensions = ${?akka.library-extensions} ["akka.serialization.SerializationExtension"]
72 # List FQCN of extensions which shall be loaded at actor system startup.
73 # Should be on the format: 'extensions = ["foo", "bar"]' etc.
74 # See the Akka Documentation for more info about Extensions
77 # Toggles whether threads created by this ActorSystem should be daemons or not
80 # JVM shutdown, System.exit(-1), in case of a fatal error,
81 # such as OutOfMemoryError
82 jvm-exit-on-fatal-error = on
84 # Akka installs JVM shutdown hooks by default, e.g. in CoordinatedShutdown and Artery. This property will
85 # not disable user-provided hooks registered using `CoordinatedShutdown#addCancellableJvmShutdownHook`.
86 # This property is related to `akka.coordinated-shutdown.run-by-jvm-shutdown-hook` below.
87 # This property makes it possible to disable all such hooks if the application itself
88 # or a higher level framework such as Play prefers to install the JVM shutdown hook and
89 # terminate the ActorSystem itself, with or without using CoordinatedShutdown.
90 jvm-shutdown-hooks = on
94 # Either one of "local", "remote" or "cluster" or the
95 # FQCN of the ActorRefProvider to be used; the below is the built-in default,
96 # note that "remote" and "cluster" requires the akka-remote and akka-cluster
97 # artifacts to be on the classpath.
100 # The guardian "/user" will use this class to obtain its supervisorStrategy.
101 # It needs to be a subclass of akka.actor.SupervisorStrategyConfigurator.
102 # In addition to the default there is akka.actor.StoppingSupervisorStrategy.
103 guardian-supervisor-strategy = "akka.actor.DefaultSupervisorStrategy"
105 # Timeout for ActorSystem.actorOf
106 creation-timeout = 20s
108 # Serializes and deserializes (non-primitive) messages to ensure immutability,
109 # this is only intended for testing.
110 serialize-messages = off
112 # Additional serialization bindings which are enabled automatically when allow-java-serialization is disabled.
113 # settings are provided
114 java-serialization-disabled-additional-serialization-bindings = {}
116 # Serializes and deserializes creators (in Props) to ensure that they can be
117 # sent over the network, this is only intended for testing. Purely local deployments
118 # as marked with deploy.scope == LocalScope are exempt from verification.
119 serialize-creators = off
121 # Timeout for send operations to top-level actors which are in the process
122 # of being started. This is only relevant if using a bounded mailbox or the
123 # CallingThreadDispatcher for a top-level actor.
124 unstarted-push-timeout = 10s
127 # Default timeout for typed actor methods with non-void return type
131 # Mapping between ´deployment.router' short names to fully qualified class names
132 router.type-mapping {
133 from-code = "akka.routing.NoRouter"
134 round-robin-pool = "akka.routing.RoundRobinPool"
135 round-robin-group = "akka.routing.RoundRobinGroup"
136 random-pool = "akka.routing.RandomPool"
137 random-group = "akka.routing.RandomGroup"
138 balancing-pool = "akka.routing.BalancingPool"
139 smallest-mailbox-pool = "akka.routing.SmallestMailboxPool"
140 broadcast-pool = "akka.routing.BroadcastPool"
141 broadcast-group = "akka.routing.BroadcastGroup"
142 scatter-gather-pool = "akka.routing.ScatterGatherFirstCompletedPool"
143 scatter-gather-group = "akka.routing.ScatterGatherFirstCompletedGroup"
144 tail-chopping-pool = "akka.routing.TailChoppingPool"
145 tail-chopping-group = "akka.routing.TailChoppingGroup"
146 consistent-hashing-pool = "akka.routing.ConsistentHashingPool"
147 consistent-hashing-group = "akka.routing.ConsistentHashingGroup"
152 # deployment id pattern - on the format: /parent/child etc.
155 # The id of the dispatcher to use for this actor.
156 # If undefined or empty the dispatcher specified in code
157 # (Props.withDispatcher) is used, or default-dispatcher if not
161 # The id of the mailbox to use for this actor.
162 # If undefined or empty the default mailbox of the configured dispatcher
163 # is used or if there is no mailbox configuration the mailbox specified
164 # in code (Props.withMailbox) is used.
165 # If there is a mailbox defined in the configured dispatcher then that
166 # overrides this setting.
169 # routing (load-balance) scheme to use
170 # - available: "from-code", "round-robin", "random", "smallest-mailbox",
171 # "scatter-gather", "broadcast"
172 # - or: Fully qualified class name of the router class.
173 # The class must extend akka.routing.CustomRouterConfig and
174 # have a public constructor with com.typesafe.config.Config
175 # and optional akka.actor.DynamicAccess parameter.
176 # - default is "from-code";
177 # Whether or not an actor is transformed to a Router is decided in code
178 # only (Props.withRouter). The type of router can be overridden in the
179 # configuration; specifying "from-code" means that the values specified
180 # in the code shall be used.
181 # In case of routing, the actors to be routed to can be specified
183 # - nr-of-instances: will create that many children
184 # - routees.paths: will route messages to these paths using ActorSelection,
185 # i.e. will not create children
186 # - resizer: dynamically resizable number of routees as specified in
190 # number of children to create in case of a router;
191 # this setting is ignored if routees.paths is given
194 # within is the timeout used for routers containing future calls
197 # number of virtual nodes per node for consistent-hashing router
198 virtual-nodes-factor = 10
200 tail-chopping-router {
201 # interval is duration between sending message to next routee
202 interval = 10 milliseconds
206 # Alternatively to giving nr-of-instances you can specify the full
207 # paths of those actors which should be routed to. This setting takes
208 # precedence over nr-of-instances
212 # To use a dedicated dispatcher for the routees of the pool you can
213 # define the dispatcher configuration inline with the property name
214 # 'pool-dispatcher' in the deployment section of the router.
217 # fork-join-executor.parallelism-min = 5
218 # fork-join-executor.parallelism-max = 5
221 # Routers with dynamically resizable number of routees; this feature is
222 # enabled by including (parts of) this section in the deployment
227 # The fewest number of routees the router should ever have.
230 # The most number of routees the router should ever have.
231 # Must be greater than or equal to lower-bound.
234 # Threshold used to evaluate if a routee is considered to be busy
235 # (under pressure). Implementation depends on this value (default is 1).
236 # 0: number of routees currently processing a message.
237 # 1: number of routees currently processing a message has
238 # some messages in mailbox.
239 # > 1: number of routees with at least the configured pressure-threshold
240 # messages in their mailbox. Note that estimating mailbox size of
241 # default UnboundedMailbox is O(N) operation.
242 pressure-threshold = 1
244 # Percentage to increase capacity whenever all routees are busy.
245 # For example, 0.2 would increase 20% (rounded up), i.e. if current
246 # capacity is 6 it will request an increase of 2 more routees.
249 # Minimum fraction of busy routees before backing off.
250 # For example, if this is 0.3, then we'll remove some routees only when
251 # less than 30% of routees are busy, i.e. if current capacity is 10 and
252 # 3 are busy then the capacity is unchanged, but if 2 or less are busy
253 # the capacity is decreased.
254 # Use 0.0 or negative to avoid removal of routees.
255 backoff-threshold = 0.3
257 # Fraction of routees to be removed when the resizer reaches the
259 # For example, 0.1 would decrease 10% (rounded up), i.e. if current
260 # capacity is 9 it will request an decrease of 1 routee.
263 # Number of messages between resize operation.
264 # Use 1 to resize before each message.
265 messages-per-resize = 10
268 # Routers with dynamically resizable number of routees based on
269 # performance metrics.
270 # This feature is enabled by including (parts of) this section in
271 # the deployment, cannot be enabled together with default resizer.
272 optimal-size-exploring-resizer {
276 # The fewest number of routees the router should ever have.
279 # The most number of routees the router should ever have.
280 # Must be greater than or equal to lower-bound.
283 # probability of doing a ramping down when all routees are busy
284 # during exploration.
285 chance-of-ramping-down-when-full = 0.2
287 # Interval between each resize attempt
290 # If the routees have not been fully utilized (i.e. all routees busy)
291 # for such length, the resizer will downsize the pool.
292 downsize-after-underutilized-for = 72h
294 # Duration exploration, the ratio between the largest step size and
295 # current pool size. E.g. if the current pool size is 50, and the
296 # explore-step-size is 0.1, the maximum pool size change during
297 # exploration will be +- 5
298 explore-step-size = 0.1
300 # Probability of doing an exploration v.s. optmization.
301 chance-of-exploration = 0.4
303 # When downsizing after a long streak of underutilization, the resizer
304 # will downsize the pool to the highest utiliziation multiplied by a
305 # a downsize ratio. This downsize ratio determines the new pools size
306 # in comparison to the highest utilization.
307 # E.g. if the highest utilization is 10, and the down size ratio
308 # is 0.8, the pool will be downsized to 8
311 # When optimizing, the resizer only considers the sizes adjacent to the
312 # current size. This number indicates how many adjacent sizes to consider.
313 optimization-range = 16
315 # The weight of the latest metric over old metrics when collecting
316 # performance metrics.
317 # E.g. if the last processing speed is 10 millis per message at pool
318 # size 5, and if the new processing speed collected is 6 millis per
319 # message at pool size 5. Given a weight of 0.3, the metrics
320 # representing pool size 5 will be 6 * 0.3 + 10 * 0.7, i.e. 8.8 millis
321 # Obviously, this number should be between 0 and 1.
322 weight-of-latest-metric = 0.5
326 "/IO-DNS/inet-address" {
327 mailbox = "unbounded"
328 router = "consistent-hashing-pool"
332 "/IO-DNS/inet-address/*" {
333 dispatcher = "akka.actor.default-blocking-io-dispatcher"
336 "/IO-DNS/async-dns" {
337 mailbox = "unbounded"
338 router = "round-robin-pool"
344 # Must be one of the following
345 # Dispatcher, PinnedDispatcher, or a FQCN to a class inheriting
346 # MessageDispatcherConfigurator with a public constructor with
347 # both com.typesafe.config.Config parameter and
348 # akka.dispatch.DispatcherPrerequisites parameters.
349 # PinnedDispatcher must be used together with executor=thread-pool-executor.
352 # Which kind of ExecutorService to use for this dispatcher
354 # - "default-executor" requires a "default-executor" section
355 # - "fork-join-executor" requires a "fork-join-executor" section
356 # - "thread-pool-executor" requires a "thread-pool-executor" section
357 # - "affinity-pool-executor" requires an "affinity-pool-executor" section
358 # - A FQCN of a class extending ExecutorServiceConfigurator
359 executor = "default-executor"
361 # This will be used if you have set "executor = "default-executor"".
362 # If an ActorSystem is created with a given ExecutionContext, this
363 # ExecutionContext will be used as the default executor for all
364 # dispatchers in the ActorSystem configured with
365 # executor = "default-executor". Note that "default-executor"
366 # is the default value for executor, and therefore used if not
367 # specified otherwise. If no ExecutionContext is given,
368 # the executor configured in "fallback" will be used.
370 fallback = "fork-join-executor"
373 # This will be used if you have set "executor = "affinity-pool-executor""
374 # Underlying thread pool implementation is akka.dispatch.affinity.AffinityPool.
375 # This executor is classified as "ApiMayChange".
376 affinity-pool-executor {
377 # Min number of threads to cap factor-based parallelism number to
380 # The parallelism factor is used to determine thread pool size using the
381 # following formula: ceil(available processors * factor). Resulting size
382 # is then bounded by the parallelism-min and parallelism-max values.
383 parallelism-factor = 0.8
385 # Max number of threads to cap factor-based parallelism number to.
388 # Each worker in the pool uses a separate bounded MPSC queue. This value
389 # indicates the upper bound of the queue. Whenever an attempt to enqueue
390 # a task is made and the queue does not have capacity to accommodate
391 # the task, the rejection handler created by the rejection handler specified
392 # in "rejection-handler" is invoked.
393 task-queue-size = 512
395 # FQCN of the Rejection handler used in the pool.
396 # Must have an empty public constructor and must
397 # implement akka.actor.affinity.RejectionHandlerFactory.
398 rejection-handler = "akka.dispatch.affinity.ThrowOnOverflowRejectionHandler"
400 # Level of CPU time used, on a scale between 1 and 10, during backoff/idle.
401 # The tradeoff is that to have low latency more CPU time must be used to be
402 # able to react quickly on incoming messages or send as fast as possible after
403 # backoff backpressure.
404 # Level 1 strongly prefer low CPU consumption over low latency.
405 # Level 10 strongly prefer low latency over low CPU consumption.
408 # FQCN of the akka.dispatch.affinity.QueueSelectorFactory.
409 # The Class of the FQCN must have a public constructor with a
410 # (com.typesafe.config.Config) parameter.
411 # A QueueSelectorFactory create instances of akka.dispatch.affinity.QueueSelector,
412 # that is responsible for determining which task queue a Runnable should be enqueued in.
413 queue-selector = "akka.dispatch.affinity.FairDistributionHashCache"
415 # When using the "akka.dispatch.affinity.FairDistributionHashCache" queue selector
416 # internally the AffinityPool uses two methods to determine which task
417 # queue to allocate a Runnable to:
418 # - map based - maintains a round robin counter and a map of Runnable
419 # hashcodes to queues that they have been associated with. This ensures
420 # maximum fairness in terms of work distribution, meaning that each worker
421 # will get approximately equal amount of mailboxes to execute. This is suitable
422 # in cases where we have a small number of actors that will be scheduled on
423 # the pool and we want to ensure the maximum possible utilization of the
425 # - hash based - the task - queue in which the runnable should go is determined
426 # by using an uniformly distributed int to int hash function which uses the
427 # hash code of the Runnable as an input. This is preferred in situations where we
428 # have enough number of distinct actors to ensure statistically uniform
429 # distribution of work across threads or we are ready to sacrifice the
430 # former for the added benefit of avoiding map look-ups.
431 fair-work-distribution {
432 # The value serves as a threshold which determines the point at which the
433 # pool switches from the first to the second work distribution schemes.
434 # For example, if the value is set to 128, the pool can observe up to
435 # 128 unique actors and schedule their mailboxes using the map based
436 # approach. Once this number is reached the pool switches to hash based
437 # task distribution mode. If the value is set to 0, the map based
438 # work distribution approach is disabled and only the hash based is
439 # used irrespective of the number of unique actors. Valid range is
440 # 0 to 2048 (inclusive)
445 # This will be used if you have set "executor = "fork-join-executor""
446 # Underlying thread pool implementation is akka.dispatch.forkjoin.ForkJoinPool
448 # Min number of threads to cap factor-based parallelism number to
451 # The parallelism factor is used to determine thread pool size using the
452 # following formula: ceil(available processors * factor). Resulting size
453 # is then bounded by the parallelism-min and parallelism-max values.
454 parallelism-factor = 3.0
456 # Max number of threads to cap factor-based parallelism number to
459 # Setting to "FIFO" to use queue like peeking mode which "poll" or "LIFO" to use stack
460 # like peeking mode which "pop".
461 task-peeking-mode = "FIFO"
464 # This will be used if you have set "executor = "thread-pool-executor""
465 # Underlying thread pool implementation is java.util.concurrent.ThreadPoolExecutor
466 thread-pool-executor {
467 # Keep alive time for threads
468 keep-alive-time = 60s
470 # Define a fixed thread pool size with this property. The corePoolSize
471 # and the maximumPoolSize of the ThreadPoolExecutor will be set to this
472 # value, if it is defined. Then the other pool-size properties will not
475 # Valid values are: `off` or a positive integer.
476 fixed-pool-size = off
478 # Min number of threads to cap factor-based corePoolSize number to
479 core-pool-size-min = 8
481 # The core-pool-size-factor is used to determine corePoolSize of the
482 # ThreadPoolExecutor using the following formula:
483 # ceil(available processors * factor).
484 # Resulting size is then bounded by the core-pool-size-min and
485 # core-pool-size-max values.
486 core-pool-size-factor = 3.0
488 # Max number of threads to cap factor-based corePoolSize number to
489 core-pool-size-max = 64
491 # Minimum number of threads to cap factor-based maximumPoolSize number to
492 max-pool-size-min = 8
494 # The max-pool-size-factor is used to determine maximumPoolSize of the
495 # ThreadPoolExecutor using the following formula:
496 # ceil(available processors * factor)
497 # The maximumPoolSize will not be less than corePoolSize.
498 # It is only used if using a bounded task queue.
499 max-pool-size-factor = 3.0
501 # Max number of threads to cap factor-based maximumPoolSize number to
502 max-pool-size-max = 64
504 # Specifies the bounded capacity of the task queue (< 1 == unbounded)
507 # Specifies which type of task queue will be used, can be "array" or
509 task-queue-type = "linked"
511 # Allow core threads to time out
512 allow-core-timeout = on
515 # How long time the dispatcher will wait for new actors until it shuts down
516 shutdown-timeout = 1s
518 # Throughput defines the number of messages that are processed in a batch
519 # before the thread is returned to the pool. Set to 1 for as fair as possible.
522 # Throughput deadline for Dispatcher, set to 0 or negative for no deadline
523 throughput-deadline-time = 0ms
525 # For BalancingDispatcher: If the balancing dispatcher should attempt to
526 # schedule idle actors using the same dispatcher when a message comes in,
527 # and the dispatchers ExecutorService is not fully busy already.
528 attempt-teamwork = on
530 # If this dispatcher requires a specific type of mailbox, specify the
531 # fully-qualified class name here; the actually created mailbox will
532 # be a subtype of this type. The empty string signifies no requirement.
533 mailbox-requirement = ""
536 default-blocking-io-dispatcher {
538 executor = "thread-pool-executor"
541 thread-pool-executor {
547 # FQCN of the MailboxType. The Class of the FQCN must have a public
549 # (akka.actor.ActorSystem.Settings, com.typesafe.config.Config) parameters.
550 mailbox-type = "akka.dispatch.UnboundedMailbox"
552 # If the mailbox is bounded then it uses this setting to determine its
553 # capacity. The provided value must be positive.
555 # Up to version 2.1 the mailbox type was determined based on this setting;
556 # this is no longer the case, the type must explicitly be a bounded mailbox.
557 mailbox-capacity = 1000
559 # If the mailbox is bounded then this is the timeout for enqueueing
560 # in case the mailbox is full. Negative values signify infinite
561 # timeout, which should be avoided as it bears the risk of dead-lock.
562 mailbox-push-timeout-time = 10s
564 # For Actor with Stash: The default capacity of the stash.
565 # If negative (or zero) then an unbounded stash is used (default)
566 # If positive then a bounded stash is used and the capacity is set using
572 # Mapping between message queue semantics and mailbox configurations.
573 # Used by akka.dispatch.RequiresMessageQueue[T] to enforce different
574 # mailbox types on actors.
575 # If your Actor implements RequiresMessageQueue[T], then when you create
576 # an instance of that actor its mailbox type will be decided by looking
577 # up a mailbox configuration via T in this mapping
579 "akka.dispatch.UnboundedMessageQueueSemantics" =
580 akka.actor.mailbox.unbounded-queue-based
581 "akka.dispatch.BoundedMessageQueueSemantics" =
582 akka.actor.mailbox.bounded-queue-based
583 "akka.dispatch.DequeBasedMessageQueueSemantics" =
584 akka.actor.mailbox.unbounded-deque-based
585 "akka.dispatch.UnboundedDequeBasedMessageQueueSemantics" =
586 akka.actor.mailbox.unbounded-deque-based
587 "akka.dispatch.BoundedDequeBasedMessageQueueSemantics" =
588 akka.actor.mailbox.bounded-deque-based
589 "akka.dispatch.MultipleConsumerSemantics" =
590 akka.actor.mailbox.unbounded-queue-based
591 "akka.dispatch.ControlAwareMessageQueueSemantics" =
592 akka.actor.mailbox.unbounded-control-aware-queue-based
593 "akka.dispatch.UnboundedControlAwareMessageQueueSemantics" =
594 akka.actor.mailbox.unbounded-control-aware-queue-based
595 "akka.dispatch.BoundedControlAwareMessageQueueSemantics" =
596 akka.actor.mailbox.bounded-control-aware-queue-based
597 "akka.event.LoggerMessageQueueSemantics" =
598 akka.actor.mailbox.logger-queue
601 unbounded-queue-based {
602 # FQCN of the MailboxType, The Class of the FQCN must have a public
603 # constructor with (akka.actor.ActorSystem.Settings,
604 # com.typesafe.config.Config) parameters.
605 mailbox-type = "akka.dispatch.UnboundedMailbox"
608 bounded-queue-based {
609 # FQCN of the MailboxType, The Class of the FQCN must have a public
610 # constructor with (akka.actor.ActorSystem.Settings,
611 # com.typesafe.config.Config) parameters.
612 mailbox-type = "akka.dispatch.BoundedMailbox"
615 unbounded-deque-based {
616 # FQCN of the MailboxType, The Class of the FQCN must have a public
617 # constructor with (akka.actor.ActorSystem.Settings,
618 # com.typesafe.config.Config) parameters.
619 mailbox-type = "akka.dispatch.UnboundedDequeBasedMailbox"
622 bounded-deque-based {
623 # FQCN of the MailboxType, The Class of the FQCN must have a public
624 # constructor with (akka.actor.ActorSystem.Settings,
625 # com.typesafe.config.Config) parameters.
626 mailbox-type = "akka.dispatch.BoundedDequeBasedMailbox"
629 unbounded-control-aware-queue-based {
630 # FQCN of the MailboxType, The Class of the FQCN must have a public
631 # constructor with (akka.actor.ActorSystem.Settings,
632 # com.typesafe.config.Config) parameters.
633 mailbox-type = "akka.dispatch.UnboundedControlAwareMailbox"
636 bounded-control-aware-queue-based {
637 # FQCN of the MailboxType, The Class of the FQCN must have a public
638 # constructor with (akka.actor.ActorSystem.Settings,
639 # com.typesafe.config.Config) parameters.
640 mailbox-type = "akka.dispatch.BoundedControlAwareMailbox"
643 # The LoggerMailbox will drain all messages in the mailbox
644 # when the system is shutdown and deliver them to the StandardOutLogger.
645 # Do not change this unless you know what you are doing.
647 mailbox-type = "akka.event.LoggerMailboxType"
652 # enable function of Actor.loggable(), which is to log any received message
653 # at DEBUG level, see the “Testing Actor Systems” section of the Akka
654 # Documentation at http://akka.io/docs
657 # enable DEBUG logging of all AutoReceiveMessages (Kill, PoisonPill etc.)
660 # enable DEBUG logging of actor lifecycle changes
663 # enable DEBUG logging of all LoggingFSMs for events, transitions and timers
666 # enable DEBUG logging of subscription changes on the eventStream
669 # enable DEBUG logging of unhandled messages
672 # enable WARN logging of misconfigured routers
673 router-misconfiguration = off
676 # SECURITY BEST-PRACTICE is to disable java serialization for its multiple
677 # known attack surfaces.
679 # This setting is a short-cut to
680 # - using DisabledJavaSerializer instead of JavaSerializer
681 # - enable-additional-serialization-bindings = on
683 # Completely disable the use of `akka.serialization.JavaSerialization` by the
684 # Akka Serialization extension, instead DisabledJavaSerializer will
685 # be inserted which will fail explicitly if attempts to use java serialization are made.
687 # The log messages emitted by such serializer SHOULD be treated as potential
688 # attacks which the serializer prevented, as they MAY indicate an external operator
689 # attempting to send malicious messages intending to use java serialization as attack vector.
690 # The attempts are logged with the SECURITY marker.
692 # Please note that this option does not stop you from manually invoking java serialization
694 # The default value for this might be changed to off in future versions of Akka.
695 allow-java-serialization = on
697 # Entries for pluggable serializers and their bindings.
699 java = "akka.serialization.JavaSerializer"
700 bytes = "akka.serialization.ByteArraySerializer"
702 primitive-boolean = "akka.serialization.BooleanSerializer"
705 # Class to Serializer binding. You only need to specify the name of an
706 # interface or abstract base class of the messages. In case of ambiguity it
707 # is using the most specific configured class, or giving a warning and
708 # choosing the “first” one.
710 # To disable one of the default serializers, assign its class to "none", like
711 # "java.io.Serializable" = none
712 serialization-bindings {
714 "java.io.Serializable" = java
716 // TODO issue #27330: BooleanSerializer not enabled for serialization in 2.5.x yet
717 #"java.lang.Boolean" = primitive-boolean
718 #"scala.Boolean" = primitive-boolean
721 # Additional serialization-bindings that are replacing Java serialization are
722 # defined in this section for backwards compatibility reasons. They are included
723 # by default but can be excluded for backwards compatibility with Akka 2.4.x.
724 # They can be disabled with enable-additional-serialization-bindings=off.
726 # This should only be needed for backwards compatibility reasons.
727 enable-additional-serialization-bindings = on
729 # Additional serialization-bindings that are replacing Java serialization are
730 # defined in this section for backwards compatibility reasons. They are included
731 # by default but can be excluded for backwards compatibility with Akka 2.4.x.
732 # They can be disabled with enable-additional-serialization-bindings=off.
733 additional-serialization-bindings {
736 # Log warnings when the default Java serialization is used to serialize messages.
737 # The default serializer uses Java serialization which is not very performant and should not
738 # be used in production environments unless you don't care about performance. In that case
739 # you can turn this off.
740 warn-about-java-serializer-usage = on
742 # To be used with the above warn-about-java-serializer-usage
743 # When warn-about-java-serializer-usage = on, and this warn-on-no-serialization-verification = off,
744 # warnings are suppressed for classes extending NoSerializationVerificationNeeded
746 warn-on-no-serialization-verification = on
748 # Configuration namespace of serialization identifiers.
749 # Each serializer implementation must have an entry in the following format:
750 # `akka.actor.serialization-identifiers."FQCN" = ID`
751 # where `FQCN` is fully qualified class name of the serializer implementation
752 # and `ID` is globally unique serializer identifier number.
753 # Identifier values from 0 to 40 are reserved for Akka internal usage.
754 serialization-identifiers {
755 "akka.serialization.JavaSerializer" = 1
756 "akka.serialization.ByteArraySerializer" = 4
757 "akka.serialization.BooleanSerializer" = 35
760 # Configuration items which are used by the akka.actor.ActorDSL._ methods
762 # Maximum queue size of the actor created by newInbox(); this protects
763 # against faulty programs which use select() and consistently miss messages
766 # Default timeout to assume for operations like Inbox.receive et al
772 serialization.protobuf {
774 # Additional classes that are allowed even if they are not defined in `serialization-bindings`.
775 # It can be exact class name or name of super class or interfaces (one level).
776 # This is useful when a class is not used for serialization any more and therefore removed
777 # from `serialization-bindings`, but should still be possible to deserialize.
779 "com.google.protobuf.GeneratedMessage",
780 "com.google.protobuf.GeneratedMessageV3",
781 "scalapb.GeneratedMessageCompanion",
782 "akka.protobuf.GeneratedMessage"
786 # Used to set the behavior of the scheduler.
787 # Changing the default values may change the system behavior drastically so make
788 # sure you know what you're doing! See the Scheduler section of the Akka
789 # Documentation for more details.
791 # The LightArrayRevolverScheduler is used as the default scheduler in the
792 # system. It does not execute the scheduled tasks on exact time, but on every
793 # tick, it will run everything that is (over)due. You can increase or decrease
794 # the accuracy of the execution timing by specifying smaller or larger tick
795 # duration. If you are scheduling a lot of tasks you should consider increasing
796 # the ticks per wheel.
797 # Note that it might take up to 1 tick to stop the Timer, so setting the
798 # tick-duration to a high value will make shutting down the actor system
802 # The timer uses a circular wheel of buckets to store the timer tasks.
803 # This should be set such that the majority of scheduled timeouts (for high
804 # scheduling frequency) will be shorter than one rotation of the wheel
805 # (ticks-per-wheel * ticks-duration)
806 # THIS MUST BE A POWER OF TWO!
807 ticks-per-wheel = 512
809 # This setting selects the timer implementation which shall be loaded at
811 # The class given here must implement the akka.actor.Scheduler interface
812 # and offer a public constructor which takes three arguments:
813 # 1) com.typesafe.config.Config
814 # 2) akka.event.LoggingAdapter
815 # 3) java.util.concurrent.ThreadFactory
816 implementation = akka.actor.LightArrayRevolverScheduler
818 # When shutting down the scheduler, there will typically be a thread which
819 # needs to be stopped, and this timeout determines how long to wait for
820 # that to happen. In case of timeout the shutdown of the actor system will
821 # proceed without running possibly still enqueued tasks.
822 shutdown-timeout = 5s
827 # By default the select loops run on dedicated threads, hence using a
830 type = "PinnedDispatcher"
831 executor = "thread-pool-executor"
832 thread-pool-executor.allow-core-timeout = off
837 # The number of selectors to stripe the served channels over; each of
838 # these will use one select loop on the selector-dispatcher.
841 # Maximum number of open channels supported by this TCP module; there is
842 # no intrinsic general limit, this setting is meant to enable DoS
843 # protection by limiting the number of concurrently connected clients.
844 # Also note that this is a "soft" limit; in certain cases the implementation
845 # will accept a few connections more or a few less than the number configured
846 # here. Must be an integer > 0 or "unlimited".
847 max-channels = 256000
849 # When trying to assign a new connection to a selector and the chosen
850 # selector is at full capacity, retry selector choosing and assignment
851 # this many times before giving up
852 selector-association-retries = 10
854 # The maximum number of connection that are accepted in one go,
855 # higher numbers decrease latency, lower numbers increase fairness on
856 # the worker-dispatcher
857 batch-accept-limit = 10
859 # The number of bytes per direct buffer in the pool used to read or write
860 # network data from the kernel.
861 direct-buffer-size = 128 KiB
863 # The maximal number of direct buffers kept in the direct buffer pool for
865 direct-buffer-pool-limit = 1000
867 # The duration a connection actor waits for a `Register` message from
868 # its commander before aborting the connection.
869 register-timeout = 5s
871 # The maximum number of bytes delivered by a `Received` message. Before
872 # more data is read from the network the connection actor will try to
874 # The purpose of this setting is to impose a smaller limit than the
875 # configured receive buffer size. When using value 'unlimited' it will
876 # try to read all from the receive buffer.
877 max-received-message-size = unlimited
879 # Enable fine grained logging of what goes on inside the implementation.
880 # Be aware that this may log more than once per message sent to the actors
881 # of the tcp implementation.
884 # Fully qualified config path which holds the dispatcher configuration
885 # to be used for running the select() calls in the selectors
886 selector-dispatcher = "akka.io.pinned-dispatcher"
888 # Fully qualified config path which holds the dispatcher configuration
889 # for the read/write worker actors
890 worker-dispatcher = "akka.actor.default-dispatcher"
892 # Fully qualified config path which holds the dispatcher configuration
893 # for the selector management actors
894 management-dispatcher = "akka.actor.default-dispatcher"
896 # Fully qualified config path which holds the dispatcher configuration
897 # on which file IO tasks are scheduled
898 file-io-dispatcher = "akka.actor.default-blocking-io-dispatcher"
900 # The maximum number of bytes (or "unlimited") to transfer in one batch
901 # when using `WriteFile` command which uses `FileChannel.transferTo` to
902 # pipe files to a TCP socket. On some OS like Linux `FileChannel.transferTo`
903 # may block for a long time when network IO is faster than file IO.
904 # Decreasing the value may improve fairness while increasing may improve
906 file-io-transferTo-limit = 512 KiB
908 # The number of times to retry the `finishConnect` call after being notified about
909 # OP_CONNECT. Retries are needed if the OP_CONNECT notification doesn't imply that
910 # `finishConnect` will succeed, which is the case on Android.
911 finish-connect-retries = 5
913 # On Windows connection aborts are not reliably detected unless an OP_READ is
914 # registered on the selector _after_ the connection has been reset. This
915 # workaround enables an OP_CONNECT which forces the abort to be visible on Windows.
916 # Enabling this setting on other platforms than Windows will cause various failures
917 # and undefined behavior.
918 # Possible values of this key are on, off and auto where auto will enable the
919 # workaround if Windows is detected automatically.
920 windows-connection-abort-workaround-enabled = off
925 # The number of selectors to stripe the served channels over; each of
926 # these will use one select loop on the selector-dispatcher.
929 # Maximum number of open channels supported by this UDP module Generally
930 # UDP does not require a large number of channels, therefore it is
931 # recommended to keep this setting low.
934 # The select loop can be used in two modes:
935 # - setting "infinite" will select without a timeout, hogging a thread
936 # - setting a positive timeout will do a bounded select call,
937 # enabling sharing of a single thread between multiple selectors
938 # (in this case you will have to use a different configuration for the
939 # selector-dispatcher, e.g. using "type=Dispatcher" with size 1)
940 # - setting it to zero means polling, i.e. calling selectNow()
941 select-timeout = infinite
943 # When trying to assign a new connection to a selector and the chosen
944 # selector is at full capacity, retry selector choosing and assignment
945 # this many times before giving up
946 selector-association-retries = 10
948 # The maximum number of datagrams that are read in one go,
949 # higher numbers decrease latency, lower numbers increase fairness on
950 # the worker-dispatcher
951 receive-throughput = 3
953 # The number of bytes per direct buffer in the pool used to read or write
954 # network data from the kernel.
955 direct-buffer-size = 128 KiB
957 # The maximal number of direct buffers kept in the direct buffer pool for
959 direct-buffer-pool-limit = 1000
961 # Enable fine grained logging of what goes on inside the implementation.
962 # Be aware that this may log more than once per message sent to the actors
963 # of the tcp implementation.
966 # Fully qualified config path which holds the dispatcher configuration
967 # to be used for running the select() calls in the selectors
968 selector-dispatcher = "akka.io.pinned-dispatcher"
970 # Fully qualified config path which holds the dispatcher configuration
971 # for the read/write worker actors
972 worker-dispatcher = "akka.actor.default-dispatcher"
974 # Fully qualified config path which holds the dispatcher configuration
975 # for the selector management actors
976 management-dispatcher = "akka.actor.default-dispatcher"
981 # The number of selectors to stripe the served channels over; each of
982 # these will use one select loop on the selector-dispatcher.
985 # Maximum number of open channels supported by this UDP module Generally
986 # UDP does not require a large number of channels, therefore it is
987 # recommended to keep this setting low.
990 # The select loop can be used in two modes:
991 # - setting "infinite" will select without a timeout, hogging a thread
992 # - setting a positive timeout will do a bounded select call,
993 # enabling sharing of a single thread between multiple selectors
994 # (in this case you will have to use a different configuration for the
995 # selector-dispatcher, e.g. using "type=Dispatcher" with size 1)
996 # - setting it to zero means polling, i.e. calling selectNow()
997 select-timeout = infinite
999 # When trying to assign a new connection to a selector and the chosen
1000 # selector is at full capacity, retry selector choosing and assignment
1001 # this many times before giving up
1002 selector-association-retries = 10
1004 # The maximum number of datagrams that are read in one go,
1005 # higher numbers decrease latency, lower numbers increase fairness on
1006 # the worker-dispatcher
1007 receive-throughput = 3
1009 # The number of bytes per direct buffer in the pool used to read or write
1010 # network data from the kernel.
1011 direct-buffer-size = 128 KiB
1013 # The maximal number of direct buffers kept in the direct buffer pool for
1015 direct-buffer-pool-limit = 1000
1017 # Enable fine grained logging of what goes on inside the implementation.
1018 # Be aware that this may log more than once per message sent to the actors
1019 # of the tcp implementation.
1022 # Fully qualified config path which holds the dispatcher configuration
1023 # to be used for running the select() calls in the selectors
1024 selector-dispatcher = "akka.io.pinned-dispatcher"
1026 # Fully qualified config path which holds the dispatcher configuration
1027 # for the read/write worker actors
1028 worker-dispatcher = "akka.actor.default-dispatcher"
1030 # Fully qualified config path which holds the dispatcher configuration
1031 # for the selector management actors
1032 management-dispatcher = "akka.actor.default-dispatcher"
1036 # Fully qualified config path which holds the dispatcher configuration
1037 # for the manager and resolver router actors.
1038 # For actual router configuration see akka.actor.deployment./IO-DNS/*
1039 dispatcher = "akka.actor.default-dispatcher"
1041 # Name of the subconfig at path akka.io.dns, see inet-address below
1043 # Change to `async-dns` to use the new "native" DNS resolver,
1044 # which is also capable of resolving SRV records.
1045 resolver = "inet-address"
1047 # To-be-deprecated DNS resolver implementation which uses the Java InetAddress to resolve DNS records.
1048 # To be replaced by `akka.io.dns.async` which implements the DNS protocol natively and without blocking (which InetAddress does)
1050 # Must implement akka.io.DnsProvider
1051 provider-object = "akka.io.InetAddressDnsProvider"
1053 # To set the time to cache name resolutions
1055 # default: sun.net.InetAddressCachePolicy.get() and getNegative()
1056 # forever: cache forever
1058 # n [time unit]: positive timeout with unit, for example 30s
1059 positive-ttl = default
1060 negative-ttl = default
1062 # How often to sweep out expired cache entries.
1063 # Note that this interval has nothing to do with TTLs
1064 cache-cleanup-interval = 120s
1068 provider-object = "akka.io.dns.internal.AsyncDnsProvider"
1070 # Set upper bound for caching successfully resolved dns entries
1071 # if the DNS record has a smaller TTL value than the setting that
1072 # will be used. Default is to use the record TTL with no cap.
1074 # forever: always use the minimum TTL from the found records
1075 # never: never cache
1076 # n [time unit] = cap the caching to this value
1077 positive-ttl = forever
1079 # Set how long the fact that a DNS record could not be found is
1080 # cached. If a new resolution is done while the fact is cached it will
1081 # be failed and not result in an actual DNS resolution. Default is
1084 # never: never cache
1085 # forever: cache a missing DNS record forever (you probably will not want to do this)
1086 # n [time unit] = cache for this long
1087 negative-ttl = never
1089 # Configures nameservers to query during DNS resolution.
1090 # Defaults to the nameservers that would be used by the JVM by default.
1091 # Set to a list of IPs to override the servers, e.g. [ "8.8.8.8", "8.8.4.4" ] for Google's servers
1092 # If multiple are defined then they are tried in order until one responds
1093 nameservers = default
1095 # The time that a request is allowed to live before being discarded
1096 # given no reply. The lower bound of this should always be the amount
1097 # of time to reasonably expect a DNS server to reply within.
1098 # If multiple name servers are provided then each gets this long to response before trying
1100 resolve-timeout = 5s
1102 # How often to sweep out expired cache entries.
1103 # Note that this interval has nothing to do with TTLs
1104 cache-cleanup-interval = 120s
1106 # Configures the list of search domains.
1107 # Defaults to a system dependent lookup (on Unix like OSes, will attempt to parse /etc/resolv.conf, on
1108 # other platforms, will not make any attempt to lookup the search domains). Set to a single domain, or
1109 # a list of domains, eg, [ "example.com", "example.net" ].
1110 search-domains = default
1112 # Any hosts that have a number of dots less than this will not be looked up directly, instead, a search on
1113 # the search domains will be tried first. This corresponds to the ndots option in /etc/resolv.conf, see
1114 # https://linux.die.net/man/5/resolver for more info.
1115 # Defaults to a system dependent lookup (on Unix like OSes, will attempt to parse /etc/resolv.conf, on
1116 # other platforms, will default to 1).
1123 # CoordinatedShutdown is an extension that will perform registered
1124 # tasks in the order that is defined by the phases. It is started
1125 # by calling CoordinatedShutdown(system).run(). This can be triggered
1126 # by different things, for example:
1127 # - JVM shutdown hook will by default run CoordinatedShutdown
1128 # - Cluster node will automatically run CoordinatedShutdown when it
1129 # sees itself as Exiting
1130 # - A management console or other application specific command can
1131 # run CoordinatedShutdown
1132 coordinated-shutdown {
1133 # The timeout that will be used for a phase if not specified with
1134 # 'timeout' in the phase
1135 default-phase-timeout = 5 s
1137 # Terminate the ActorSystem in the last phase actor-system-terminate.
1138 terminate-actor-system = on
1140 # Exit the JVM (System.exit(0)) in the last phase actor-system-terminate
1141 # if this is set to 'on'. It is done after termination of the
1142 # ActorSystem if terminate-actor-system=on, otherwise it is done
1143 # immediately when the last phase is reached.
1146 # Exit status to use on System.exit(int) when 'exit-jvm' is 'on'.
1149 # Run the coordinated shutdown when the JVM process exits, e.g.
1150 # via kill SIGTERM signal (SIGINT ctrl-c doesn't work).
1151 # This property is related to `akka.jvm-shutdown-hooks` above.
1152 run-by-jvm-shutdown-hook = on
1154 # When Coordinated Shutdown is triggered an instance of `Reason` is
1155 # required. That value can be used to override the default settings.
1156 # Only 'exit-jvm', 'exit-code' and 'terminate-actor-system' may be
1157 # overridden depending on the reason.
1159 # Overrides are applied using the `reason.getClass.getName`.
1160 # Overrides the `exit-code` when the `Reason` is a cluster
1161 # Downing or a Cluster Join Unsuccessful event
1162 "akka.actor.CoordinatedShutdown$ClusterDowningReason$" {
1165 "akka.actor.CoordinatedShutdown$ClusterJoinUnsuccessfulReason$" {
1170 #//#coordinated-shutdown-phases
1171 # CoordinatedShutdown is enabled by default and will run the tasks that
1172 # are added to these phases by individual Akka modules and user logic.
1174 # The phases are ordered as a DAG by defining the dependencies between the phases
1175 # to make sure shutdown tasks are run in the right order.
1177 # In general user tasks belong in the first few phases, but there may be use
1178 # cases where you would want to hook in new phases or register tasks later in
1181 # Each phase is defined as a named config section with the
1182 # following optional properties:
1183 # - timeout=15s: Override the default-phase-timeout for this phase.
1184 # - recover=off: If the phase fails the shutdown is aborted
1185 # and depending phases will not be executed.
1186 # - enabled=off: Skip all tasks registered in this phase. DO NOT use
1187 # this to disable phases unless you are absolutely sure what the
1188 # consequences are. Many of the built in tasks depend on other tasks
1189 # having been executed in earlier phases and may break if those are disabled.
1190 # depends-on=[]: Run the phase after the given phases
1193 # The first pre-defined phase that applications can add tasks to.
1194 # Note that more phases can be added in the application's
1195 # configuration by overriding this phase with an additional
1197 before-service-unbind {
1200 # Stop accepting new incoming connections.
1201 # This is where you can register tasks that makes a server stop accepting new connections. Already
1202 # established connections should be allowed to continue and complete if possible.
1204 depends-on = [before-service-unbind]
1207 # Wait for requests that are in progress to be completed.
1208 # This is where you register tasks that will wait for already established connections to complete, potentially
1209 # also first telling them that it is time to close down.
1210 service-requests-done {
1211 depends-on = [service-unbind]
1214 # Final shutdown of service endpoints.
1215 # This is where you would add tasks that forcefully kill connections that are still around.
1217 depends-on = [service-requests-done]
1220 # Phase for custom application tasks that are to be run
1221 # after service shutdown and before cluster shutdown.
1222 before-cluster-shutdown {
1223 depends-on = [service-stop]
1226 # Graceful shutdown of the Cluster Sharding regions.
1227 # This phase is not meant for users to add tasks to.
1228 cluster-sharding-shutdown-region {
1230 depends-on = [before-cluster-shutdown]
1233 # Emit the leave command for the node that is shutting down.
1234 # This phase is not meant for users to add tasks to.
1236 depends-on = [cluster-sharding-shutdown-region]
1239 # Shutdown cluster singletons
1240 # This is done as late as possible to allow the shard region shutdown triggered in
1241 # the "cluster-sharding-shutdown-region" phase to complete before the shard coordinator is shut down.
1242 # This phase is not meant for users to add tasks to.
1245 depends-on = [cluster-leave]
1248 # Wait until exiting has been completed
1249 # This phase is not meant for users to add tasks to.
1250 cluster-exiting-done {
1251 depends-on = [cluster-exiting]
1254 # Shutdown the cluster extension
1255 # This phase is not meant for users to add tasks to.
1257 depends-on = [cluster-exiting-done]
1260 # Phase for custom application tasks that are to be run
1261 # after cluster shutdown and before ActorSystem termination.
1262 before-actor-system-terminate {
1263 depends-on = [cluster-shutdown]
1266 # Last phase. See terminate-actor-system and exit-jvm above.
1267 # Don't add phases that depends on this phase because the
1268 # dispatcher and scheduler of the ActorSystem have been shutdown.
1269 # This phase is not meant for users to add tasks to.
1270 actor-system-terminate {
1272 depends-on = [before-actor-system-terminate]
1275 #//#coordinated-shutdown-phases