/** * Copyright (C) 2009-2013 Typesafe Inc. */ package akka.contrib.pattern; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.Props; import akka.actor.UntypedActor; import akka.event.Logging; import akka.event.LoggingAdapter; public class DistributedPubSubMediatorTest { private static ActorSystem system; @BeforeClass public static void setup() { system = ActorSystem.create(); } @AfterClass public static void teardown() { system.shutdown(); } @Test public void demonstrateUsage() { //#start-subscribers system.actorOf(new Props(Subscriber.class), "subscriber1"); //another node system.actorOf(new Props(Subscriber.class), "subscriber2"); system.actorOf(new Props(Subscriber.class), "subscriber3"); //#start-subscribers //#publish-message //somewhere else ActorRef publisher = system.actorOf(new Props(Publisher.class), "publisher"); // after a while the subscriptions are replicated publisher.tell("hello", null); //#publish-message } static//#subscriber public class Subscriber extends UntypedActor { LoggingAdapter log = Logging.getLogger(getContext().system(), this); public Subscriber() { ActorRef mediator = DistributedPubSubExtension.get(getContext().system()).mediator(); // subscribe to the topic named "content" mediator.tell(new DistributedPubSubMediator.Subscribe("content", getSelf()), getSelf()); } public void onReceive(Object msg) { if (msg instanceof String) log.info("Got: {}", msg); else if (msg instanceof DistributedPubSubMediator.SubscribeAck) log.info("subscribing"); else unhandled(msg); } } //#subscriber static//#publisher public class Publisher extends UntypedActor { // activate the extension ActorRef mediator = DistributedPubSubExtension.get(getContext().system()).mediator(); public void onReceive(Object msg) { if (msg instanceof String) { String in = (String) msg; String out = in.toUpperCase(); mediator.tell(new DistributedPubSubMediator.Publish("content", out), getSelf()); } else { unhandled(msg); } } } //#publisher }