package org.akka.essentials.zeromq.example2; import java.util.Random; import akka.actor.ActorRef; import akka.actor.Cancellable; import akka.actor.UntypedActor; import akka.event.Logging; import akka.event.LoggingAdapter; import akka.util.Duration; import akka.zeromq.Bind; import akka.zeromq.Frame; import akka.zeromq.HighWatermark; import akka.zeromq.Listener; import akka.zeromq.SocketOption; import akka.zeromq.ZMQMessage; import akka.zeromq.ZeroMQExtension; public class RouterActor extends UntypedActor { public static final Object TICK = "TICK"; Random random = new Random(3); int count = 0; Cancellable cancellable; ActorRef routerSocket = ZeroMQExtension.get(getContext().system()) .newRouterSocket( new SocketOption[] { new Listener(getSelf()), new Bind("tcp://127.0.0.1:1237"), new HighWatermark(50000) }); LoggingAdapter log = Logging.getLogger(getContext().system(), this); @Override public void preStart() { cancellable = getContext() .system() .scheduler() .schedule(Duration.parse("1 second"), Duration.parse("1 second"), getSelf(), TICK); } @Override public void onReceive(Object message) throws Exception { if (message.equals(TICK)) { if (random.nextBoolean() == true) { routerSocket.tell(new ZMQMessage(new Frame("A"), new Frame( "This is the workload for A"))); } else { routerSocket.tell(new ZMQMessage(new Frame("B"), new Frame( "This is the workload for B"))); } count++; if (count == 10) cancellable.cancel(); } else if (message instanceof ZMQMessage) { ZMQMessage m = (ZMQMessage) message; String replier = new String(m.payload(0)); String msg = new String(m.payload(1)); log.info("Received message from {} with mesg -> {}", replier, msg); } } }