Skip to content

Instantly share code, notes, and snippets.

@takezoe
Created October 20, 2016 13:26
Show Gist options
  • Save takezoe/c95c094a523e3934747fb4f073d69518 to your computer and use it in GitHub Desktop.
Save takezoe/c95c094a523e3934747fb4f073d69518 to your computer and use it in GitHub Desktop.
Example of Akka's EventBus
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