doc: stylish cluster.md, #24717

This commit is contained in:
Patrik Nordwall 2019-09-03 12:16:18 +02:00
parent ec6fab4481
commit 072de362d5
3 changed files with 22 additions and 16 deletions

View file

@ -5,6 +5,7 @@
package jdocs.akka.cluster.typed;
// #cluster-imports
import akka.actor.Address;
import akka.actor.typed.*;
import akka.actor.typed.javadsl.*;
import akka.cluster.ClusterEvent;
@ -78,19 +79,20 @@ public class BasicClusterExampleTest { // extends JUnitSuite {
Cluster cluster = Cluster.get(system);
Cluster cluster2 = Cluster.get(system2);
// #cluster-subscribe
TestProbe<ClusterEvent.MemberEvent> testProbe = TestProbe.create(system);
cluster
.subscriptions()
.tell(Subscribe.create(testProbe.ref(), ClusterEvent.MemberEvent.class));
ActorRef<ClusterEvent.MemberEvent> subscriber = testProbe.getRef();
// #cluster-subscribe
cluster.subscriptions().tell(Subscribe.create(subscriber, ClusterEvent.MemberEvent.class));
// #cluster-subscribe
Address anotherMemberAddress = cluster2.selfMember().address();
// #cluster-leave-example
cluster.manager().tell(Leave.create(anotherMemberAddress));
// subscriber will receive events MemberLeft, MemberExited and MemberRemoved
// #cluster-leave-example
cluster.manager().tell(Leave.create(cluster2.selfMember().address()));
testProbe.expectMessageClass(ClusterEvent.MemberLeft.class);
testProbe.expectMessageClass(ClusterEvent.MemberExited.class);
testProbe.expectMessageClass(ClusterEvent.MemberRemoved.class);
// #cluster-leave-example
} finally {
system.terminate();

View file

@ -118,17 +118,17 @@ class BasicClusterManualSpec extends WordSpec with ScalaFutures with Eventually
try {
//#cluster-create
val cluster1 = Cluster(system)
val cluster = Cluster(system)
//#cluster-create
val cluster2 = Cluster(system2)
//#cluster-join
cluster1.manager ! Join(cluster1.selfMember.address)
cluster.manager ! Join(cluster.selfMember.address)
//#cluster-join
cluster2.manager ! Join(cluster1.selfMember.address)
cluster2.manager ! Join(cluster.selfMember.address)
eventually {
cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up)
cluster.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up)
cluster2.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up)
}
@ -137,7 +137,7 @@ class BasicClusterManualSpec extends WordSpec with ScalaFutures with Eventually
//#cluster-leave
eventually {
cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up)
cluster.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up)
cluster2.isTerminated shouldEqual true
}
} finally {
@ -157,10 +157,12 @@ class BasicClusterManualSpec extends WordSpec with ScalaFutures with Eventually
val cluster1 = Cluster(system1)
val cluster2 = Cluster(system2)
val cluster3 = Cluster(system3)
def cluster = cluster1
//#cluster-subscribe
val probe1 = TestProbe[MemberEvent]()(system1)
cluster1.subscriptions ! Subscribe(probe1.ref, classOf[MemberEvent])
val subscriber = probe1.ref
//#cluster-subscribe
cluster.subscriptions ! Subscribe(subscriber, classOf[MemberEvent])
//#cluster-subscribe
cluster1.manager ! Join(cluster1.selfMember.address)
@ -193,14 +195,16 @@ class BasicClusterManualSpec extends WordSpec with ScalaFutures with Eventually
.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up, MemberStatus.up)
}
val anotherMemberAddress = cluster2.selfMember.address
//#cluster-leave-example
cluster.manager ! Leave(anotherMemberAddress)
// subscriber will receive events MemberLeft, MemberExited and MemberRemoved
//#cluster-leave-example
cluster1.manager ! Leave(cluster2.selfMember.address)
probe1.within(10.seconds) {
probe1.expectMessageType[MemberLeft].member.address shouldEqual cluster2.selfMember.address
probe1.expectMessageType[MemberExited].member.address shouldEqual cluster2.selfMember.address
probe1.expectMessageType[MemberRemoved].member.address shouldEqual cluster2.selfMember.address
}
//#cluster-leave-example
eventually {
cluster1.state.members.toList.map(_.status) shouldEqual List(MemberStatus.up, MemberStatus.up)

View file

@ -79,7 +79,7 @@ Cluster `subscriptions` can be used to receive messages when cluster state chang
for all `MemberEvent`s, then using the `manager` to have a node leave the cluster will result in events
for the node going through the lifecycle described in @ref:[Cluster Specification](../common/cluster.md).
This example subscribes with a `TestProbe` but in a real application it would be an Actor:
This example subscribes with a @scala[`subscriber: ActorRef[MemberEvent]`]@java[`ActorRef<MemberEvent> subscriber`]:
Scala
: @@snip [BasicClusterExampleSpec.scala](/akka-cluster-typed/src/test/scala/docs/akka/cluster/typed/BasicClusterExampleSpec.scala) { #cluster-subscribe }