Created
October 20, 2016 13:26
-
-
Save takezoe/c95c094a523e3934747fb4f073d69518 to your computer and use it in GitHub Desktop.
Example of Akka's EventBus
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import akka.actor._ | |
import akka.event._ | |
object EventBusTest extends App { | |
// message | |
trait EventMessage | |
case class PublishEventMessage() extends EventMessage | |
// event bus | |
class LookupBusImpl extends EventBus with LookupClassification { | |
type Event = EventMessage | |
type Classifier = String | |
type Subscriber = ActorRef | |
override protected def mapSize(): Int = 128 | |
override protected def publish(event: Event, subscriber: Subscriber): Unit = { | |
subscriber ! event | |
} | |
override protected def classify(event: Event): Classifier = "crawler-event-bus" | |
override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int = a.compareTo(b) | |
} | |
// subscriber | |
class SampleActor extends Actor { | |
def receive = { | |
case m: PublishEventMessage => println("** publish **") | |
} | |
} | |
// initialize | |
val actorSystem = ActorSystem("system") | |
val actor1 = actorSystem.actorOf(Props[SampleActor]) | |
val actor2 = actorSystem.actorOf(Props[SampleActor]) | |
val lookupBus = new LookupBusImpl() | |
// subscribe | |
lookupBus.subscribe(actor1, "crawler-event-bus") | |
lookupBus.subscribe(actor2, "crawler-event-bus") | |
// publish | |
lookupBus.publish(PublishEventMessage()) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment