public void ClusterClient_should_demonstrate_usage()
{
ClusterClient_should_communicate_to_any_node_in_cluster();
Within(TimeSpan.FromSeconds(15), () =>
{
RunOn(() =>
{
var serviceA = Sys.ActorOf(Props.Create<Service>(), "serviceA");
ClusterClientReceptionist.Get(Sys).RegisterService(serviceA);
}, _first);
RunOn(() =>
{
var serviceB = Sys.ActorOf(Props.Create<Service>(), "serviceB");
ClusterClientReceptionist.Get(Sys).RegisterService(serviceB);
}, _second, _third);
RunOn(() =>
{
AwaitCount(4);
}, _first, _second, _third, _fourth);
RunOn(() =>
{
var c = Sys.ActorOf(Client.ClusterClient.Props(ClusterClientSettings.Create(Sys).WithInitialContacts(InitialContacts)), "client");
c.Tell(new Client.ClusterClient.Send("/user/serviceA", "hello", localAffinity: true));
c.Tell(new Client.ClusterClient.SendToAll("/user/serviceB", "hi"));
}, _client);
RunOn(() =>
{
// note that "hi" was sent to 2 "serviceB"
var received = ReceiveN(3);
Assert.True(received.Contains("hello"));
Assert.True(received.Contains("hi"));
}, _client);
// strange, barriers fail without this sleep
Thread.Sleep(1000);
EnterBarrier("after-3");
});
}