Use linked directories to share docs between scala and java

Inspired by 1b2b8439ae47957a6357160608956cf3c0e7555f

Partially scripted with the 'link-common-sections.sh' script at
https://github.com/johanandren/akkadocs-sphinx2paradox/pull/3/files
This commit is contained in:
Arnout Engelen 2017-05-10 19:45:13 +02:00
parent 8fbaa1054c
commit 7bee495749
146 changed files with 214 additions and 206 deletions

View file

@ -1,4 +1,4 @@
# Experimental Modules # Experimental Modules
The label experimental caused confusion and discomfort and has therefore been replaced with "May Change" The label experimental caused confusion and discomfort and has therefore been replaced with "May Change"
please see @ref:[Modules marked "May Change"](../common/may-change.md). please see @ref:[Modules marked "May Change"](../scala/common/may-change.md).

View file

@ -1,4 +1,4 @@
# Experimental Modules # Experimental Modules
The label experimental caused confusion and discomfort and has therefore been replaced with "May Change" The label experimental caused confusion and discomfort and has therefore been replaced with "May Change"
please see @ref:[Modules marked "May Change"](../common/may-change.md). please see @ref:[Modules marked "May Change"](../scala/common/may-change.md).

View file

@ -4,7 +4,6 @@
@@@ index @@@ index
* [guide](guide/index.md)
* [java](java.md) * [java](java.md)
* [scala](scala.md) * [scala](scala.md)

View file

@ -4,9 +4,9 @@
@@@ index @@@ index
* [security/index](security/index.md) * [security/index](java/security/index.md)
* [intro/index-java](intro/index-java.md) * [intro/index-java](java/intro/index-java.md)
* [general/index](general/index.md) * [general/index](java/general/index.md)
* [java/index-actors](java/index-actors.md) * [java/index-actors](java/index-actors.md)
* [java/index-futures](java/index-futures.md) * [java/index-futures](java/index-futures.md)
* [java/index-network](java/index-network.md) * [java/index-network](java/index-network.md)
@ -15,8 +15,8 @@
* [java/http/index](java/http/index.md) * [java/http/index](java/http/index.md)
* [java/howto](java/howto.md) * [java/howto](java/howto.md)
* [java/scala-compat](java/scala-compat.md) * [java/scala-compat](java/scala-compat.md)
* [dev/index](dev/index.md) * [dev/index](java/dev/index.md)
* [project/index](project/index.md) * [project/index](java/project/index.md)
* [additional/index](additional/index.md) * [additional/index](java/additional/index.md)
@@@ @@@

View file

@ -17,8 +17,8 @@ its syntax from Erlang.
Since Akka enforces parental supervision every actor is supervised and Since Akka enforces parental supervision every actor is supervised and
(potentially) the supervisor of its children, it is advisable that you (potentially) the supervisor of its children, it is advisable that you
familiarize yourself with @ref:[Actor Systems](../general/actor-systems.md) and <!-- FIXME: More than one link target with name supervision in path Some(/java/actors.rst) --> supervision and it familiarize yourself with @ref:[Actor Systems](../scala/general/actor-systems.md) and <!-- FIXME: More than one link target with name supervision in path Some(/java/actors.rst) --> supervision and it
may also help to read @ref:[Actor References, Paths and Addresses](../general/addressing.md). may also help to read @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@ @@@
@ -140,7 +140,7 @@ create a child actor.
It is recommended to create a hierarchy of children, grand-children and so on It is recommended to create a hierarchy of children, grand-children and so on
such that it fits the logical failure-handling structure of the application, such that it fits the logical failure-handling structure of the application,
see @ref:[Actor Systems](../general/actor-systems.md). see @ref:[Actor Systems](../scala/general/actor-systems.md).
The call to `actorOf` returns an instance of `ActorRef`. This is a The call to `actorOf` returns an instance of `ActorRef`. This is a
handle to the actor instance and the only way to interact with it. The handle to the actor instance and the only way to interact with it. The
@ -175,7 +175,7 @@ constructor arguments are determined by a dependency injection framework.
You might be tempted at times to offer an `IndirectActorProducer` You might be tempted at times to offer an `IndirectActorProducer`
which always returns the same instance, e.g. by using a static field. This is which always returns the same instance, e.g. by using a static field. This is
not supported, as it goes against the meaning of an actor restart, which is not supported, as it goes against the meaning of an actor restart, which is
described here: @ref:[What Restarting Means](../general/supervision.md#supervision-restart). described here: @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
When using a dependency injection framework, actor beans *MUST NOT* have When using a dependency injection framework, actor beans *MUST NOT* have
singleton scope. singleton scope.
@ -374,7 +374,7 @@ usual.
Be aware that the ordering of failure notifications relative to user messages Be aware that the ordering of failure notifications relative to user messages
is not deterministic. In particular, a parent might restart its child before is not deterministic. In particular, a parent might restart its child before
it has processed the last messages sent by the child before the failure. it has processed the last messages sent by the child before the failure.
See @ref:[Discussion: Message Ordering](../general/message-delivery-reliability.md#message-ordering) for details. See @ref:[Discussion: Message Ordering](../scala/general/message-delivery-reliability.md#message-ordering) for details.
@@@ @@@
@ -390,7 +390,7 @@ sent to a stopped actor will be redirected to the `deadLetters` of the
<a id="actorselection-java"></a> <a id="actorselection-java"></a>
## Identifying Actors via Actor Selection ## Identifying Actors via Actor Selection
As described in @ref:[Actor References, Paths and Addresses](../general/addressing.md), each actor has a unique logical path, which As described in @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md), each actor has a unique logical path, which
is obtained by following the chain of actors from child to parent until is obtained by following the chain of actors from child to parent until
reaching the root of the actor system, and it has a physical path, which may reaching the root of the actor system, and it has a physical path, which may
differ if the supervision chain includes any remote supervisors. These paths differ if the supervision chain includes any remote supervisors. These paths
@ -573,7 +573,7 @@ on the enclosing actor from within the callback. This would break the actor
encapsulation and may introduce synchronization bugs and race conditions because encapsulation and may introduce synchronization bugs and race conditions because
the callback will be scheduled concurrently to the enclosing actor. Unfortunately the callback will be scheduled concurrently to the enclosing actor. Unfortunately
there is not yet a way to detect these illegal accesses at compile time. See also: there is not yet a way to detect these illegal accesses at compile time. See also:
@ref:[Actors and shared mutable state](../general/jmm.md#jmm-shared-state) @ref:[Actors and shared mutable state](../scala/general/jmm.md#jmm-shared-state)
@@@ @@@
@ -784,7 +784,7 @@ is only used for debugging/logging.
Tasks added to the same phase are executed in parallel without any ordering assumptions. Tasks added to the same phase are executed in parallel without any ordering assumptions.
Next phase will not start until all tasks of previous phase have been completed. Next phase will not start until all tasks of previous phase have been completed.
If tasks are not completed within a configured timeout (see @ref:[reference.conf](../general/configuration.md#config-akka-actor)) If tasks are not completed within a configured timeout (see @ref:[reference.conf](../scala/general/configuration.md#config-akka-actor))
the next phase will be started anyway. It is possible to configure `recover=off` for a phase the next phase will be started anyway. It is possible to configure `recover=off` for a phase
to abort the rest of the shutdown process if a task fails or is not completed within the timeout. to abort the rest of the shutdown process if a task fails or is not completed within the timeout.
@ -938,7 +938,7 @@ You can kill an actor by sending a `Kill` message. This will cause the actor
to throw a `ActorKilledException`, triggering a failure. The actor will to throw a `ActorKilledException`, triggering a failure. The actor will
suspend operation and its supervisor will be asked how to handle the failure, suspend operation and its supervisor will be asked how to handle the failure,
which may mean resuming the actor, restarting it or terminating it completely. which may mean resuming the actor, restarting it or terminating it completely.
See @ref:[What Supervision Means](../general/supervision.md#supervision-directives) for more information. See @ref:[What Supervision Means](../scala/general/supervision.md#supervision-directives) for more information.
Use `Kill` like this: Use `Kill` like this:
@ -1008,7 +1008,7 @@ Please note, that the child actors are *still restarted*, but no new `ActorRef`
the same principles for the children, ensuring that their `preStart()` method is called only at the creation of their the same principles for the children, ensuring that their `preStart()` method is called only at the creation of their
refs. refs.
For more information see @ref:[What Restarting Means](../general/supervision.md#supervision-restart). For more information see @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
### Initialization via message passing ### Initialization via message passing

View file

@ -0,0 +1 @@
../scala/additional

View file

@ -81,7 +81,7 @@ See @ref:[Futures](futures.md) for more information on `Futures`.
## Configuration ## Configuration
There are several configuration properties for the agents module, please refer There are several configuration properties for the agents module, please refer
to the @ref:[reference configuration](../general/configuration.md#config-akka-agent). to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-agent).
## Deprecated Transactional Agents ## Deprecated Transactional Agents

View file

@ -414,7 +414,7 @@ using the Camel Quartz component
## Configuration ## Configuration
There are several configuration properties for the Camel module, please refer There are several configuration properties for the Camel module, please refer
to the @ref:[reference configuration](../general/configuration.md#config-akka-camel). to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-camel).
## Additional Resources ## Additional Resources

View file

@ -775,7 +775,7 @@ Make sure you understand the security implications of enabling remote monitoring
## Configuration ## Configuration
There are several configuration properties for the cluster. We refer to the There are several configuration properties for the cluster. We refer to the
@ref:[reference configuration](../general/configuration.md#config-akka-cluster) for more information. @ref:[reference configuration](../scala/general/configuration.md#config-akka-cluster) for more information.
### Cluster Info Logging ### Cluster Info Logging

View file

@ -0,0 +1 @@
../scala/common

View file

@ -0,0 +1 @@
../scala/dev

View file

@ -174,7 +174,7 @@ akka.extensions = ["akka.cluster.pubsub.DistributedPubSub"]
## Delivery Guarantee ## Delivery Guarantee
As in @ref:[Message Delivery Reliability](../general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**. As in @ref:[Message Delivery Reliability](../scala/general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**.
In other words, messages can be lost over the wire. In other words, messages can be lost over the wire.
If you are looking for at-least-once delivery guarantee, we recommend [Kafka Akka Streams integration](https://github.com/akka/reactive-kafka). If you are looking for at-least-once delivery guarantee, we recommend [Kafka Akka Streams integration](https://github.com/akka/reactive-kafka).

View file

@ -1,6 +1,6 @@
# Fault Tolerance # Fault Tolerance
As explained in @ref:[Actor Systems](../general/actor-systems.md) each actor is the supervisor of its As explained in @ref:[Actor Systems](../scala/general/actor-systems.md) each actor is the supervisor of its
children, and as such each actor defines fault handling supervisor strategy. children, and as such each actor defines fault handling supervisor strategy.
This strategy cannot be changed afterwards as it is an integral part of the This strategy cannot be changed afterwards as it is an integral part of the
actor systems structure. actor systems structure.
@ -96,7 +96,7 @@ by overriding the `logFailure` method.
## Supervision of Top-Level Actors ## Supervision of Top-Level Actors
Toplevel actors means those which are created using `system.actorOf()`, and Toplevel actors means those which are created using `system.actorOf()`, and
they are children of the @ref:[User Guardian](../general/supervision.md#user-guardian). There are no they are children of the @ref:[User Guardian](../scala/general/supervision.md#user-guardian). There are no
special rules applied in this case, the guardian simply applies the configured special rules applied in this case, the guardian simply applies the configured
strategy. strategy.

View file

@ -0,0 +1 @@
../scala/general

View file

@ -0,0 +1 @@
../scala/guide

View file

@ -4,7 +4,7 @@
@@@ index @@@ index
* [../common/cluster](../common/cluster.md) * [../scala/common/cluster](../scala/common/cluster.md)
* [cluster-usage](cluster-usage.md) * [cluster-usage](cluster-usage.md)
* [cluster-singleton](cluster-singleton.md) * [cluster-singleton](cluster-singleton.md)
* [distributed-pub-sub](distributed-pub-sub.md) * [distributed-pub-sub](distributed-pub-sub.md)

View file

@ -7,9 +7,9 @@
* [event-bus](event-bus.md) * [event-bus](event-bus.md)
* [logging](logging.md) * [logging](logging.md)
* [scheduler](scheduler.md) * [scheduler](scheduler.md)
* [../common/duration](../common/duration.md) * [../scala/common/duration](../scala/common/duration.md)
* [../common/circuitbreaker](../common/circuitbreaker.md) * [../scala/common/circuitbreaker](../scala/common/circuitbreaker.md)
* [extending-akka](extending-akka.md) * [extending-akka](extending-akka.md)
* [../intro/deployment-scenarios](../intro/deployment-scenarios.md) * [../scala/intro/deployment-scenarios](../scala/intro/deployment-scenarios.md)
@@@ @@@

View file

@ -0,0 +1 @@
../scala/intro

View file

@ -101,4 +101,4 @@ A `ByteStringBuilder` can be wrapped in a `java.io.OutputStream` via the `asOutp
## Architecture in-depth ## Architecture in-depth
For further details on the design and internal architecture see @ref:[I/O Layer Design](../dev/io-layer.md). For further details on the design and internal architecture see @ref:[I/O Layer Design](../scala/dev/io-layer.md).

View file

@ -1098,7 +1098,7 @@ When testing Persistence based projects always rely on @ref:[asynchronous messag
## Configuration ## Configuration
There are several configuration properties for the persistence module, please refer There are several configuration properties for the persistence module, please refer
to the @ref:[reference configuration](../general/configuration.md#config-akka-persistence). to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-persistence).
## Multiple persistence plugin configurations ## Multiple persistence plugin configurations

View file

@ -0,0 +1 @@
../scala/project

View file

@ -2,7 +2,7 @@
@@@ note @@@ note
This page describes the @ref:[may change](../common/may-change.md) remoting subsystem, codenamed *Artery* that will eventually This page describes the @ref:[may change](../scala/common/may-change.md) remoting subsystem, codenamed *Artery* that will eventually
replace the old remoting implementation. For the current stable remoting system please refer to @ref:[Remoting](remoting.md). replace the old remoting implementation. For the current stable remoting system please refer to @ref:[Remoting](remoting.md).
@@@ @@@
@ -170,7 +170,7 @@ and automatically reply to with a `ActorIdentity` message containing the
the `ActorSelection`, which returns a `Future` of the matching the `ActorSelection`, which returns a `Future` of the matching
`ActorRef`. `ActorRef`.
For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../general/addressing.md). For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@ note @@@ note
@ -354,7 +354,7 @@ marking them `PossiblyHarmful` so that a client cannot forge them.
Akka remoting is using Aeron as underlying message transport. Aeron is using UDP and adds Akka remoting is using Aeron as underlying message transport. Aeron is using UDP and adds
among other things reliable delivery and session semantics, very similar to TCP. This means that among other things reliable delivery and session semantics, very similar to TCP. This means that
the order of the messages are preserved, which is needed for the @ref:[Actor message ordering guarantees](../general/message-delivery-reliability.md#message-ordering). the order of the messages are preserved, which is needed for the @ref:[Actor message ordering guarantees](../scala/general/message-delivery-reliability.md#message-ordering).
Under normal circumstances all messages will be delivered but there are cases when messages Under normal circumstances all messages will be delivered but there are cases when messages
may not be delivered to the destination: may not be delivered to the destination:
@ -363,7 +363,7 @@ may not be delivered to the destination:
* if serialization or deserialization of a message fails (only that message will be dropped) * if serialization or deserialization of a message fails (only that message will be dropped)
* if an unexpected exception occurs in the remoting infrastructure * if an unexpected exception occurs in the remoting infrastructure
In short, Actor message delivery is “at-most-once” as described in @ref:[Message Delivery Reliability](../general/message-delivery-reliability.md) In short, Actor message delivery is “at-most-once” as described in @ref:[Message Delivery Reliability](../scala/general/message-delivery-reliability.md)
Some messages in Akka are called system messages and those cannot be dropped because that would result Some messages in Akka are called system messages and those cannot be dropped because that would result
in an inconsistent state between the systems. Such messages are used for essentially two features; remote death in an inconsistent state between the systems. Such messages are used for essentially two features; remote death
@ -748,7 +748,7 @@ crashes unexpectedly.
for production systems. for production systems.
The location of the file can be controlled via the *akka.remote.artery.advanced.flight-recoder.destination* setting (see The location of the file can be controlled via the *akka.remote.artery.advanced.flight-recoder.destination* setting (see
@ref:[akka-remote (artery)](../general/configuration.md#config-akka-remote-artery) for details). By default, a file with the *.afr* extension is produced in the temporary @ref:[akka-remote (artery)](../scala/general/configuration.md#config-akka-remote-artery) for details). By default, a file with the *.afr* extension is produced in the temporary
directory of the operating system. In cases where the flight recorder casuses issues, it can be disabled by adding the directory of the operating system. In cases where the flight recorder casuses issues, it can be disabled by adding the
setting *akka.remote.artery.advanced.flight-recorder.enabled=off*, although this is not recommended. setting *akka.remote.artery.advanced.flight-recorder.enabled=off*, although this is not recommended.
@ -756,7 +756,7 @@ setting *akka.remote.artery.advanced.flight-recorder.enabled=off*, although this
## Remote Configuration ## Remote Configuration
There are lots of configuration properties that are related to remoting in Akka. We refer to the There are lots of configuration properties that are related to remoting in Akka. We refer to the
@ref:[reference configuration](../general/configuration.md#config-akka-remote-artery) for more information. @ref:[reference configuration](../scala/general/configuration.md#config-akka-remote-artery) for more information.
@@@ note @@@ note

View file

@ -9,7 +9,7 @@ peer-to-peer fashion and it has limitations for client-server setups. In
particular Akka Remoting does not work transparently with Network Address Translation, particular Akka Remoting does not work transparently with Network Address Translation,
Load Balancers, or in Docker containers. For symmetric communication in these situations Load Balancers, or in Docker containers. For symmetric communication in these situations
network and/or Akka configuration will have to be changed as described in network and/or Akka configuration will have to be changed as described in
@ref:[Peer-to-Peer vs. Client-Server](../general/remoting.md#symmetric-communication). @ref:[Peer-to-Peer vs. Client-Server](../scala/general/remoting.md#symmetric-communication).
@@@ @@@
@ -95,7 +95,7 @@ the `ActorSelection`, which returns a `CompletionStage` of the matching
@@@ note @@@ note
For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../general/addressing.md). For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@ @@@
@ -495,7 +495,7 @@ Creating and working with keystores and certificates is well documented in the
[Generating X.509 Certificates](http://typesafehub.github.io/ssl-config/CertificateGeneration.html#using-keytool) [Generating X.509 Certificates](http://typesafehub.github.io/ssl-config/CertificateGeneration.html#using-keytool)
section of Lightbend's SSL-Config library. section of Lightbend's SSL-Config library.
Since an Akka remoting is inherently @ref:[peer-to-peer](../general/remoting.md#symmetric-communication) both the key-store as well as trust-store Since an Akka remoting is inherently @ref:[peer-to-peer](../scala/general/remoting.md#symmetric-communication) both the key-store as well as trust-store
need to be configured on each remoting node participating in the cluster. need to be configured on each remoting node participating in the cluster.
The official [Java Secure Socket Extension documentation](http://docs.oracle.com/javase/7/jdocs/technotes/guides/security/jsse/JSSERefGuide.html) The official [Java Secure Socket Extension documentation](http://docs.oracle.com/javase/7/jdocs/technotes/guides/security/jsse/JSSERefGuide.html)
@ -592,7 +592,7 @@ marking them `PossiblyHarmful` so that a client cannot forge them.
## Remote Configuration ## Remote Configuration
There are lots of configuration properties that are related to remoting in Akka. We refer to the There are lots of configuration properties that are related to remoting in Akka. We refer to the
@ref:[reference configuration](../general/configuration.md#config-akka-remote) for more information. @ref:[reference configuration](../scala/general/configuration.md#config-akka-remote) for more information.
@@@ note @@@ note

View file

@ -0,0 +1 @@
../scala/security

View file

@ -6,7 +6,7 @@
* [stream-introduction](stream-introduction.md) * [stream-introduction](stream-introduction.md)
* [stream-quickstart](stream-quickstart.md) * [stream-quickstart](stream-quickstart.md)
* [../../general/stream/stream-design](../../general/stream/stream-design.md) * [../../scala/general/stream/stream-design](../../scala/general/stream/stream-design.md)
* [stream-flows-and-basics](stream-flows-and-basics.md) * [stream-flows-and-basics](stream-flows-and-basics.md)
* [stream-graphs](stream-graphs.md) * [stream-graphs](stream-graphs.md)
* [stream-composition](stream-composition.md) * [stream-composition](stream-composition.md)
@ -20,6 +20,6 @@
* [stream-testkit](stream-testkit.md) * [stream-testkit](stream-testkit.md)
* [stages-overview](stages-overview.md) * [stages-overview](stages-overview.md)
* [stream-cookbook](stream-cookbook.md) * [stream-cookbook](stream-cookbook.md)
* [../../general/stream/stream-configuration](../../general/stream/stream-configuration.md) * [../../scala/general/stream/stream-configuration](../../scala/general/stream/stream-configuration.md)
@@@ @@@

View file

@ -65,7 +65,7 @@ and for best results we recommend the following approach:
* Read the @ref:[Quick Start Guide](stream-quickstart.md#stream-quickstart-java) to get a feel for how streams * Read the @ref:[Quick Start Guide](stream-quickstart.md#stream-quickstart-java) to get a feel for how streams
look like and what they can do. look like and what they can do.
* The top-down learners may want to peruse the @ref:[Design Principles behind Akka Streams](../../general/stream/stream-design.md) at this * The top-down learners may want to peruse the @ref:[Design Principles behind Akka Streams](../../scala/general/stream/stream-design.md) at this
point. point.
* The bottom-up learners may feel more at home rummaging through the * The bottom-up learners may feel more at home rummaging through the
@ref:[Streams Cookbook](stream-cookbook.md). @ref:[Streams Cookbook](stream-cookbook.md).

View file

@ -3,7 +3,7 @@
# Quick Start Guide # Quick Start Guide
Create a project and add the akka-streams dependency to the build tool of your Create a project and add the akka-streams dependency to the build tool of your
choice as described in @ref:[Using a build tool](../../intro/getting-started.md#build-tool). choice as described in @ref:[Using a build tool](../../scala/intro/getting-started.md#build-tool).
A stream usually begins at a source, so this is also how we start an Akka A stream usually begins at a source, so this is also how we start an Akka
Stream. Before we create one, we import the full complement of streaming tools: Stream. Before we create one, we import the full complement of streaming tools:

View file

@ -316,7 +316,7 @@ for managing time constraints:
@@snip [TestKitDocTest.java](code/jdocs/testkit/TestKitDocTest.java) { #test-within } @@snip [TestKitDocTest.java](code/jdocs/testkit/TestKitDocTest.java) { #test-within }
The block in `within` must complete after a @ref:[Duration](../common/duration.md) which The block in `within` must complete after a @ref:[Duration](../scala/common/duration.md) which
is between `min` and `max`, where the former defaults to zero. The is between `min` and `max`, where the former defaults to zero. The
deadline calculated by adding the `max` parameter to the block's start deadline calculated by adding the `max` parameter to the block's start
time is implicitly available within the block to all examination methods, if time is implicitly available within the block to all examination methods, if
@ -679,4 +679,4 @@ akka {
## Configuration ## Configuration
There are several configuration properties for the TestKit module, please refer There are several configuration properties for the TestKit module, please refer
to the @ref:[reference configuration](../general/configuration.md#config-akka-testkit). to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-testkit).

View file

@ -4,9 +4,10 @@
@@@ index @@@ index
* [security/index](security/index.md) * [scala/guide](scala/guide/index.md)
* [intro/index-scala](intro/index-scala.md) * [security/index](scala/security/index.md)
* [general/index](general/index.md) * [intro/index-scala](scala/intro/index-scala.md)
* [general/index](scala/general/index.md)
* [scala/index-actors](scala/index-actors.md) * [scala/index-actors](scala/index-actors.md)
* [scala/index-futures](scala/index-futures.md) * [scala/index-futures](scala/index-futures.md)
* [scala/index-network](scala/index-network.md) * [scala/index-network](scala/index-network.md)
@ -14,8 +15,8 @@
* [scala/stream/index](scala/stream/index.md) * [scala/stream/index](scala/stream/index.md)
* [scala/http/index](scala/http/index.md) * [scala/http/index](scala/http/index.md)
* [scala/howto](scala/howto.md) * [scala/howto](scala/howto.md)
* [dev/index](dev/index.md) * [dev/index](scala/dev/index.md)
* [project/index](project/index.md) * [project/index](scala/project/index.md)
* [additional/index](additional/index.md) * [additional/index](scala/additional/index.md)
@@@ @@@

View file

@ -17,8 +17,8 @@ its syntax from Erlang.
Since Akka enforces parental supervision every actor is supervised and Since Akka enforces parental supervision every actor is supervised and
(potentially) the supervisor of its children, it is advisable that you (potentially) the supervisor of its children, it is advisable that you
familiarize yourself with @ref:[Actor Systems](../general/actor-systems.md) and <!-- FIXME: More than one link target with name supervision in path Some(/scala/actors.rst) --> supervision and it familiarize yourself with @ref:[Actor Systems](../scala/general/actor-systems.md) and <!-- FIXME: More than one link target with name supervision in path Some(/scala/actors.rst) --> supervision and it
may also help to read @ref:[Actor References, Paths and Addresses](../general/addressing.md). may also help to read @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@ @@@
@ -157,7 +157,7 @@ create a child actor.
It is recommended to create a hierarchy of children, grand-children and so on It is recommended to create a hierarchy of children, grand-children and so on
such that it fits the logical failure-handling structure of the application, such that it fits the logical failure-handling structure of the application,
see @ref:[Actor Systems](../general/actor-systems.md). see @ref:[Actor Systems](../scala/general/actor-systems.md).
The call to `actorOf` returns an instance of `ActorRef`. This is a The call to `actorOf` returns an instance of `ActorRef`. This is a
handle to the actor instance and the only way to interact with it. The handle to the actor instance and the only way to interact with it. The
@ -200,7 +200,7 @@ constructor arguments are determined by a dependency injection framework.
You might be tempted at times to offer an `IndirectActorProducer` You might be tempted at times to offer an `IndirectActorProducer`
which always returns the same instance, e.g. by using a `lazy val`. This is which always returns the same instance, e.g. by using a `lazy val`. This is
not supported, as it goes against the meaning of an actor restart, which is not supported, as it goes against the meaning of an actor restart, which is
described here: @ref:[What Restarting Means](../general/supervision.md#supervision-restart). described here: @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
When using a dependency injection framework, actor beans *MUST NOT* have When using a dependency injection framework, actor beans *MUST NOT* have
singleton scope. singleton scope.
@ -404,7 +404,7 @@ usual.
Be aware that the ordering of failure notifications relative to user messages Be aware that the ordering of failure notifications relative to user messages
is not deterministic. In particular, a parent might restart its child before is not deterministic. In particular, a parent might restart its child before
it has processed the last messages sent by the child before the failure. it has processed the last messages sent by the child before the failure.
See @ref:[Discussion: Message Ordering](../general/message-delivery-reliability.md#message-ordering) for details. See @ref:[Discussion: Message Ordering](../scala/general/message-delivery-reliability.md#message-ordering) for details.
@@@ @@@
@ -420,7 +420,7 @@ sent to a stopped actor will be redirected to the `deadLetters` of the
<a id="actorselection-scala"></a> <a id="actorselection-scala"></a>
## Identifying Actors via Actor Selection ## Identifying Actors via Actor Selection
As described in @ref:[Actor References, Paths and Addresses](../general/addressing.md), each actor has a unique logical path, which As described in @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md), each actor has a unique logical path, which
is obtained by following the chain of actors from child to parent until is obtained by following the chain of actors from child to parent until
reaching the root of the actor system, and it has a physical path, which may reaching the root of the actor system, and it has a physical path, which may
differ if the supervision chain includes any remote supervisors. These paths differ if the supervision chain includes any remote supervisors. These paths
@ -603,7 +603,7 @@ on the enclosing actor from within the callback. This would break the actor
encapsulation and may introduce synchronization bugs and race conditions because encapsulation and may introduce synchronization bugs and race conditions because
the callback will be scheduled concurrently to the enclosing actor. Unfortunately the callback will be scheduled concurrently to the enclosing actor. Unfortunately
there is not yet a way to detect these illegal accesses at compile time. there is not yet a way to detect these illegal accesses at compile time.
See also: @ref:[Actors and shared mutable state](../general/jmm.md#jmm-shared-state) See also: @ref:[Actors and shared mutable state](../scala/general/jmm.md#jmm-shared-state)
@@@ @@@
@ -777,7 +777,7 @@ is only used for debugging/logging.
Tasks added to the same phase are executed in parallel without any ordering assumptions. Tasks added to the same phase are executed in parallel without any ordering assumptions.
Next phase will not start until all tasks of previous phase have been completed. Next phase will not start until all tasks of previous phase have been completed.
If tasks are not completed within a configured timeout (see @ref:[reference.conf](../general/configuration.md#config-akka-actor)) If tasks are not completed within a configured timeout (see @ref:[reference.conf](../scala/general/configuration.md#config-akka-actor))
the next phase will be started anyway. It is possible to configure `recover=off` for a phase the next phase will be started anyway. It is possible to configure `recover=off` for a phase
to abort the rest of the shutdown process if a task fails or is not completed within the timeout. to abort the rest of the shutdown process if a task fails or is not completed within the timeout.
@ -945,7 +945,7 @@ You can kill an actor by sending a `Kill` message. This will cause the actor
to throw a `ActorKilledException`, triggering a failure. The actor will to throw a `ActorKilledException`, triggering a failure. The actor will
suspend operation and its supervisor will be asked how to handle the failure, suspend operation and its supervisor will be asked how to handle the failure,
which may mean resuming the actor, restarting it or terminating it completely. which may mean resuming the actor, restarting it or terminating it completely.
See @ref:[What Supervision Means](../general/supervision.md#supervision-directives) for more information. See @ref:[What Supervision Means](../scala/general/supervision.md#supervision-directives) for more information.
Use `Kill` like this: Use `Kill` like this:
@ -1033,7 +1033,7 @@ Please note, that the child actors are *still restarted*, but no new `ActorRef`
the same principles for the children, ensuring that their `preStart()` method is called only at the creation of their the same principles for the children, ensuring that their `preStart()` method is called only at the creation of their
refs. refs.
For more information see @ref:[What Restarting Means](../general/supervision.md#supervision-restart). For more information see @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
### Initialization via message passing ### Initialization via message passing

View file

@ -93,12 +93,12 @@ be different
If you still do not see anything, look at what the logging of remote If you still do not see anything, look at what the logging of remote
life-cycle events tells you (normally logged at INFO level) or switch on life-cycle events tells you (normally logged at INFO level) or switch on
@ref:[Auxiliary remote logging options](../java/logging.md#logging-remote-java) @ref:[Auxiliary remote logging options](../../java/logging.md#logging-remote-java)
to see all sent and received messages (logged at DEBUG level). to see all sent and received messages (logged at DEBUG level).
### Which options shall I enable when debugging remoting issues? ### Which options shall I enable when debugging remoting issues?
Have a look at the @ref:[Remote Configuration](../java/remoting.md#remote-configuration-java), the typical candidates are: Have a look at the @ref:[Remote Configuration](../../java/remoting.md#remote-configuration-java), the typical candidates are:
* *akka.remote.log-sent-messages* * *akka.remote.log-sent-messages*
* *akka.remote.log-received-messages* * *akka.remote.log-received-messages*
@ -170,4 +170,4 @@ To enable different types of debug logging add the following to your configurati
* `akka.actor.debug.autoreceive` will log all *special* messages like `Kill`, `PoisonPill` e.t.c. sent to all actors * `akka.actor.debug.autoreceive` will log all *special* messages like `Kill`, `PoisonPill` e.t.c. sent to all actors
* `akka.actor.debug.lifecycle` will log all actor lifecycle events of all actors * `akka.actor.debug.lifecycle` will log all actor lifecycle events of all actors
Read more about it in the docs for @ref:[Logging](../java/logging.md) and @ref:[actor.logging-scala](../scala/testing.md#actor-logging-scala). Read more about it in the docs for @ref:[Logging](../../java/logging.md) and @ref:[actor.logging-scala](../../scala/testing.md#actor-logging-scala).

View file

@ -10,4 +10,4 @@
* [books](books.md) * [books](books.md)
* [osgi](osgi.md) * [osgi](osgi.md)
@@@ @@@

View file

@ -109,7 +109,7 @@ Example of monadic usage:
## Configuration ## Configuration
There are several configuration properties for the agents module, please refer There are several configuration properties for the agents module, please refer
to the @ref:[reference configuration](../general/configuration.md#config-akka-agent). to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-agent).
## Deprecated Transactional Agents ## Deprecated Transactional Agents

View file

@ -403,7 +403,7 @@ using the Camel Quartz component
## Configuration ## Configuration
There are several configuration properties for the Camel module, please refer There are several configuration properties for the Camel module, please refer
to the @ref:[reference configuration](../general/configuration.md#config-akka-camel). to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-camel).
## Additional Resources ## Additional Resources

View file

@ -717,12 +717,12 @@ and to the registered subscribers on the system event bus with the help of `clus
## How to Test ## How to Test
@ref:[Multi Node Testing](../dev/multi-node-testing.md) is useful for testing cluster applications. @ref:[Multi Node Testing](../scala/dev/multi-node-testing.md) is useful for testing cluster applications.
Set up your project according to the instructions in @ref:[Multi Node Testing](../dev/multi-node-testing.md) and @ref:[Multi JVM Testing](../dev/multi-jvm-testing.md), i.e. Set up your project according to the instructions in @ref:[Multi Node Testing](../scala/dev/multi-node-testing.md) and @ref:[Multi JVM Testing](../scala/dev/multi-jvm-testing.md), i.e.
add the `sbt-multi-jvm` plugin and the dependency to `akka-multi-node-testkit`. add the `sbt-multi-jvm` plugin and the dependency to `akka-multi-node-testkit`.
First, as described in @ref:[Multi Node Testing](../dev/multi-node-testing.md), we need some scaffolding to configure the `MultiNodeSpec`. First, as described in @ref:[Multi Node Testing](../scala/dev/multi-node-testing.md), we need some scaffolding to configure the `MultiNodeSpec`.
Define the participating roles and their [cluster_configuration_scala](#cluster-configuration-scala) in an object extending `MultiNodeConfig`: Define the participating roles and their [cluster_configuration_scala](#cluster-configuration-scala) in an object extending `MultiNodeConfig`:
@@snip [StatsSampleSpec.scala]../../../../../akka-cluster-metrics/src/multi-jvm/scala/akka/cluster/metrics/sample/StatsSampleSpec.scala) { #MultiNodeConfig } @@snip [StatsSampleSpec.scala]../../../../../akka-cluster-metrics/src/multi-jvm/scala/akka/cluster/metrics/sample/StatsSampleSpec.scala) { #MultiNodeConfig }
@ -839,7 +839,7 @@ Make sure you understand the security implications of enabling remote monitoring
## Configuration ## Configuration
There are several configuration properties for the cluster. We refer to the There are several configuration properties for the cluster. We refer to the
@ref:[reference configuration](../general/configuration.md#config-akka-cluster) for more information. @ref:[reference configuration](../scala/general/configuration.md#config-akka-cluster) for more information.
### Cluster Info Logging ### Cluster Info Logging

View file

@ -33,7 +33,7 @@ These are the current complete modules marked as **may change**:
@@@ index @@@ index
* [../dev/multi-node-testing](../dev/multi-node-testing.md) * [../dev/multi-node-testing](../dev/multi-node-testing.md)
* [../scala/typed](../scala/typed.md) * [../../scala/typed](../../scala/typed.md)
@@@ @@@

View file

@ -9,7 +9,7 @@ The multi-JVM testing is an sbt plugin that you can find at [http://github.com/s
You can add it as a plugin by adding the following to your project/plugins.sbt: You can add it as a plugin by adding the following to your project/plugins.sbt:
@@snip [plugins.sbt]../../../../../project/plugins.sbt) { #sbt-multi-jvm } @@snip [plugins.sbt]../project/plugins.sbt) { #sbt-multi-jvm }
You can then add multi-JVM testing to `build.sbt` or `project/Build.scala` by including the `MultiJvm` You can then add multi-JVM testing to `build.sbt` or `project/Build.scala` by including the `MultiJvm`
settings and config. Please note that MultiJvm test sources are located in `src/multi-jvm/...`, settings and config. Please note that MultiJvm test sources are located in `src/multi-jvm/...`,
@ -197,4 +197,4 @@ the sbt prompt.
There has also been some additions made to the `SbtMultiJvm` plugin to accommodate the There has also been some additions made to the `SbtMultiJvm` plugin to accommodate the
@ref:[may change](../common/may-change.md) module @ref:[multi node testing](multi-node-testing.md), @ref:[may change](../common/may-change.md) module @ref:[multi node testing](multi-node-testing.md),
described in that section. described in that section.

View file

@ -177,7 +177,7 @@ akka.extensions = ["akka.cluster.pubsub.DistributedPubSub"]
## Delivery Guarantee ## Delivery Guarantee
As in @ref:[Message Delivery Reliability](../general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**. As in @ref:[Message Delivery Reliability](../scala/general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**.
In other words, messages can be lost over the wire. In other words, messages can be lost over the wire.
If you are looking for at-least-once delivery guarantee, we recommend [Kafka Akka Streams integration](https://github.com/akka/reactive-kafka). If you are looking for at-least-once delivery guarantee, we recommend [Kafka Akka Streams integration](https://github.com/akka/reactive-kafka).

View file

@ -1,6 +1,6 @@
# Fault Tolerance # Fault Tolerance
As explained in @ref:[Actor Systems](../general/actor-systems.md) each actor is the supervisor of its As explained in @ref:[Actor Systems](../scala/general/actor-systems.md) each actor is the supervisor of its
children, and as such each actor defines fault handling supervisor strategy. children, and as such each actor defines fault handling supervisor strategy.
This strategy cannot be changed afterwards as it is an integral part of the This strategy cannot be changed afterwards as it is an integral part of the
actor systems structure. actor systems structure.
@ -104,7 +104,7 @@ by overriding the `logFailure` method.
## Supervision of Top-Level Actors ## Supervision of Top-Level Actors
Toplevel actors means those which are created using `system.actorOf()`, and Toplevel actors means those which are created using `system.actorOf()`, and
they are children of the @ref:[User Guardian](../general/supervision.md#user-guardian). There are no they are children of the @ref:[User Guardian](../scala/general/supervision.md#user-guardian). There are no
special rules applied in this case, the guardian simply applies the configured special rules applied in this case, the guardian simply applies the configured
strategy. strategy.

View file

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

View file

@ -119,7 +119,7 @@ includes the following suggestions:
> >
* Do the blocking call within an actor (or a set of actors managed by a router * Do the blocking call within an actor (or a set of actors managed by a router
[@ref:[Java](../java/routing.md), @ref:[Scala](../scala/routing.md)]), making sure to [@ref:[Java](../../java/routing.md), @ref:[Scala](../../scala/routing.md)]), making sure to
configure a thread pool which is either dedicated for this purpose or configure a thread pool which is either dedicated for this purpose or
sufficiently sized. sufficiently sized.
* Do the blocking call within a `Future`, ensuring an upper bound on * Do the blocking call within a `Future`, ensuring an upper bound on
@ -144,8 +144,8 @@ on which DBMS is deployed on what hardware.
Configuring thread pools is a task best delegated to Akka, simply configure Configuring thread pools is a task best delegated to Akka, simply configure
in the `application.conf` and instantiate through an `ActorSystem` in the `application.conf` and instantiate through an `ActorSystem`
[@ref:[Java](../java/dispatchers.md#dispatcher-lookup-java), @ref:[Scala [@ref:[Java](../../java/dispatchers.md#dispatcher-lookup-java), @ref:[Scala
](../scala/dispatchers.md#dispatcher-lookup-scala)] ](../../scala/dispatchers.md#dispatcher-lookup-scala)]
@@@ @@@
@ -167,4 +167,4 @@ actor, which in turn will recursively stop all its child actors, the system
guardian. guardian.
If you want to execute some operations while terminating `ActorSystem`, If you want to execute some operations while terminating `ActorSystem`,
look at `CoordinatedShutdown` [@ref:[Java](../java/actors.md#coordinated-shutdown-java), @ref:[Scala](../scala/actors.md#coordinated-shutdown-scala)] look at `CoordinatedShutdown` [@ref:[Java](../../java/actors.md#coordinated-shutdown-java), @ref:[Scala](../../scala/actors.md#coordinated-shutdown-scala)]

View file

@ -5,7 +5,7 @@ hierarchies and are the smallest unit when building an application. This
section looks at one such actor in isolation, explaining the concepts you section looks at one such actor in isolation, explaining the concepts you
encounter while implementing it. For a more in depth reference with all the encounter while implementing it. For a more in depth reference with all the
details please refer to details please refer to
@ref:[Actors (Scala)](../scala/actors.md) and @ref:[Actors (Java)](../java/actors.md). @ref:[Actors (Scala)](../../scala/actors.md) and @ref:[Actors (Java)](../../java/actors.md).
An actor is a container for [State](#state), [Behavior](#behavior), a [Mailbox](#mailbox), [Child Actors](#child-actors) An actor is a container for [State](#state), [Behavior](#behavior), a [Mailbox](#mailbox), [Child Actors](#child-actors)
and a [Supervisor Strategy](#supervisor-strategy). All of this is encapsulated behind an [Actor and a [Supervisor Strategy](#supervisor-strategy). All of this is encapsulated behind an [Actor
@ -32,7 +32,7 @@ publishes this information itself.
Actor objects will typically contain some variables which reflect possible Actor objects will typically contain some variables which reflect possible
states the actor may be in. This can be an explicit state machine (e.g. using states the actor may be in. This can be an explicit state machine (e.g. using
the @ref:[FSM](../scala/fsm.md) module), or it could be a counter, set of listeners, the @ref:[FSM](../../scala/fsm.md) module), or it could be a counter, set of listeners,
pending requests, etc. These data are what make an actor valuable, and they pending requests, etc. These data are what make an actor valuable, and they
must be protected from corruption by other actors. The good news is that Akka must be protected from corruption by other actors. The good news is that Akka
actors conceptually each have their own light-weight thread, which is actors conceptually each have their own light-weight thread, which is
@ -53,7 +53,7 @@ the actor. This is to enable the ability of self-healing of the system.
Optionally, an actor's state can be automatically recovered to the state Optionally, an actor's state can be automatically recovered to the state
before a restart by persisting received messages and replaying them after before a restart by persisting received messages and replaying them after
restart (see @ref:[Persistence](../scala/persistence.md)). restart (see @ref:[Persistence](../../scala/persistence.md)).
## Behavior ## Behavior

View file

@ -244,8 +244,8 @@ The configuration can also be used for application specific settings.
A good practice is to place those settings in an Extension, as described in: A good practice is to place those settings in an Extension, as described in:
> >
* Scala API: @ref:[extending-akka-scala.settings](../scala/extending-akka.md#extending-akka-scala-settings) * Scala API: @ref:[extending-akka-scala.settings](../../scala/extending-akka.md#extending-akka-scala-settings)
* Java API: @ref:[extending-akka-java.settings](../java/extending-akka.md#extending-akka-java-settings) * Java API: @ref:[extending-akka-java.settings](../../java/extending-akka.md#extending-akka-java-settings)
## Configuring multiple ActorSystem ## Configuring multiple ActorSystem

View file

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Before After
Before After

View file

@ -67,6 +67,6 @@ Since Akka runs on the JVM there are still some rules to be followed.
* Closing over internal Actor state and exposing it to other threads * Closing over internal Actor state and exposing it to other threads
@@snip [SharedMutableStateDocSpec.scala](../scala/code/docs/actor/SharedMutableStateDocSpec.scala) { #mutable-state } @@snip [SharedMutableStateDocSpec.scala](../../scala/code/docs/actor/SharedMutableStateDocSpec.scala) { #mutable-state }
* Messages **should** be immutable, this is to avoid the shared mutable state trap. * Messages **should** be immutable, this is to avoid the shared mutable state trap.

View file

@ -280,13 +280,13 @@ acknowledgement
The third becomes necessary by virtue of the acknowledgements not being guaranteed The third becomes necessary by virtue of the acknowledgements not being guaranteed
to arrive either. An ACK-RETRY protocol with business-level acknowledgements is to arrive either. An ACK-RETRY protocol with business-level acknowledgements is
supported by @ref:[At-Least-Once Delivery](../scala/persistence.md#at-least-once-delivery-scala) of the Akka Persistence module. Duplicates can be supported by @ref:[At-Least-Once Delivery](../../scala/persistence.md#at-least-once-delivery-scala) of the Akka Persistence module. Duplicates can be
detected by tracking the identifiers of messages sent via @ref:[At-Least-Once Delivery](../scala/persistence.md#at-least-once-delivery-scala). detected by tracking the identifiers of messages sent via @ref:[At-Least-Once Delivery](../../scala/persistence.md#at-least-once-delivery-scala).
Another way of implementing the third part would be to make processing the messages Another way of implementing the third part would be to make processing the messages
idempotent on the level of the business logic. idempotent on the level of the business logic.
Another example of implementing all three requirements is shown at Another example of implementing all three requirements is shown at
<!-- FIXME: unresolved link reference: reliable-proxy --> reliable-proxy (which is now superseded by @ref:[At-Least-Once Delivery](../scala/persistence.md#at-least-once-delivery-scala)). <!-- FIXME: unresolved link reference: reliable-proxy --> reliable-proxy (which is now superseded by @ref:[At-Least-Once Delivery](../../scala/persistence.md#at-least-once-delivery-scala)).
### Event Sourcing ### Event Sourcing
@ -301,7 +301,7 @@ components may consume the event stream as a means to replicate the component
state on a different continent or to react to changes). If the components state on a different continent or to react to changes). If the components
state is lost—due to a machine failure or by being pushed out of a cache—it can state is lost—due to a machine failure or by being pushed out of a cache—it can
easily be reconstructed by replaying the event stream (usually employing easily be reconstructed by replaying the event stream (usually employing
snapshots to speed up the process). @ref:[Event sourcing](../scala/persistence.md#event-sourcing-scala) is supported by snapshots to speed up the process). @ref:[Event sourcing](../../scala/persistence.md#event-sourcing-scala) is supported by
Akka Persistence. Akka Persistence.
### Mailbox with Explicit Acknowledgement ### Mailbox with Explicit Acknowledgement
@ -344,7 +344,7 @@ guaranteed delivery.
### How do I Receive Dead Letters? ### How do I Receive Dead Letters?
An actor can subscribe to class `akka.actor.DeadLetter` on the event An actor can subscribe to class `akka.actor.DeadLetter` on the event
stream, see @ref:[Event Stream](../java/event-bus.md#event-stream-java) (Java) or @ref:[Event Stream](../scala/event-bus.md#event-stream-scala) stream, see @ref:[Event Stream](../../java/event-bus.md#event-stream-java) (Java) or @ref:[Event Stream](../../scala/event-bus.md#event-stream-scala)
(Scala) for how to do that. The subscribed actor will then receive all dead (Scala) for how to do that. The subscribed actor will then receive all dead
letters published in the (local) system from that point onwards. Dead letters letters published in the (local) system from that point onwards. Dead letters
are not propagated over the network, if you want to collect them in one place are not propagated over the network, if you want to collect them in one place

View file

@ -66,7 +66,7 @@ containers violates assumption 1, unless additional steps are taken in the
network configuration to allow symmetric communication between involved systems. network configuration to allow symmetric communication between involved systems.
In such situations Akka can be configured to bind to a different network In such situations Akka can be configured to bind to a different network
address than the one used for establishing connections between Akka nodes. address than the one used for establishing connections between Akka nodes.
See @ref:[Akka behind NAT or in a Docker container](../scala/remoting.md#remote-configuration-nat). See @ref:[Akka behind NAT or in a Docker container](../../scala/remoting.md#remote-configuration-nat).
## Marking Points for Scaling Up with Routers ## Marking Points for Scaling Up with Routers
@ -81,4 +81,4 @@ up a configurable number of children of the desired type and route to them in
the configured fashion. Once such a router has been declared, its configuration the configured fashion. Once such a router has been declared, its configuration
can be freely overridden from the configuration file, including mixing it with can be freely overridden from the configuration file, including mixing it with
the remote deployment of (some of) the children. Read more about the remote deployment of (some of) the children. Read more about
this in @ref:[Routing (Scala)](../scala/routing.md) and @ref:[Routing (Java)](../java/routing.md). this in @ref:[Routing (Scala)](../../scala/routing.md) and @ref:[Routing (Java)](../../java/routing.md).

View file

@ -195,7 +195,7 @@ Provided as a built-in pattern the `akka.pattern.BackoffSupervisor` implements t
This pattern is useful when the started actor fails <a id="^1" href="#1">[1]</a> because some external resource is not available, This pattern is useful when the started actor fails <a id="^1" href="#1">[1]</a> because some external resource is not available,
and we need to give it some time to start-up again. One of the prime examples when this is useful is and we need to give it some time to start-up again. One of the prime examples when this is useful is
when a @ref:[PersistentActor](../scala/persistence.md) fails (by stopping) with a persistence failure - which indicates that when a @ref:[PersistentActor](../../scala/persistence.md) fails (by stopping) with a persistence failure - which indicates that
the database may be down or overloaded, in such situations it makes most sense to give it a little bit of time the database may be down or overloaded, in such situations it makes most sense to give it a little bit of time
to recover before the peristent actor is started. to recover before the peristent actor is started.
@ -204,13 +204,13 @@ to recover before the peristent actor is started.
The following Scala snippet shows how to create a backoff supervisor which will start the given echo actor after it has stopped The following Scala snippet shows how to create a backoff supervisor which will start the given echo actor after it has stopped
because of a failure, in increasing intervals of 3, 6, 12, 24 and finally 30 seconds: because of a failure, in increasing intervals of 3, 6, 12, 24 and finally 30 seconds:
@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-stop } @@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-stop }
The above is equivalent to this Java code: The above is equivalent to this Java code:
@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports } @@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports }
@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-stop } @@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-stop }
Using a `randomFactor` to add a little bit of additional variance to the backoff intervals Using a `randomFactor` to add a little bit of additional variance to the backoff intervals
is highly recommended, in order to avoid multiple actors re-start at the exact same point in time, is highly recommended, in order to avoid multiple actors re-start at the exact same point in time,
@ -225,23 +225,23 @@ crashes and the supervision strategy decides that it should restart.
The following Scala snippet shows how to create a backoff supervisor which will start the given echo actor after it has crashed The following Scala snippet shows how to create a backoff supervisor which will start the given echo actor after it has crashed
because of some exception, in increasing intervals of 3, 6, 12, 24 and finally 30 seconds: because of some exception, in increasing intervals of 3, 6, 12, 24 and finally 30 seconds:
@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-fail } @@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-fail }
The above is equivalent to this Java code: The above is equivalent to this Java code:
@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports } @@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports }
@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-fail } @@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-fail }
The `akka.pattern.BackoffOptions` can be used to customize the behavior of the back-off supervisor actor, below are some examples: The `akka.pattern.BackoffOptions` can be used to customize the behavior of the back-off supervisor actor, below are some examples:
@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-stop } @@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-stop }
The above code sets up a back-off supervisor that requires the child actor to send a `akka.pattern.BackoffSupervisor.Reset` message The above code sets up a back-off supervisor that requires the child actor to send a `akka.pattern.BackoffSupervisor.Reset` message
to its parent when a message is successfully processed, resetting the back-off. It also uses a default stopping strategy, any exception to its parent when a message is successfully processed, resetting the back-off. It also uses a default stopping strategy, any exception
will cause the child to stop. will cause the child to stop.
@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-fail } @@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-fail }
The above code sets up a back-off supervisor that restarts the child after back-off if MyException is thrown, any other exception will be The above code sets up a back-off supervisor that restarts the child after back-off if MyException is thrown, any other exception will be
escalated. The back-off is automatically reset if the child does not throw any errors within 10 seconds. escalated. The back-off is automatically reset if the child does not throw any errors within 10 seconds.
@ -279,4 +279,4 @@ Please note that creating one-off actors from an all-for-one supervisor entails
that failures escalated by the temporary actor will affect all the permanent that failures escalated by the temporary actor will affect all the permanent
ones. If this is not desired, install an intermediate supervisor; this can very ones. If this is not desired, install an intermediate supervisor; this can very
easily be done by declaring a router of size 1 for the worker, see easily be done by declaring a router of size 1 for the worker, see
@ref:[Routing](../scala/routing.md) or @ref:[Routing](../java/routing.md). @ref:[Routing](../../scala/routing.md) or @ref:[Routing](../../java/routing.md).

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

Some files were not shown because too many files have changed in this diff Show more