Skip to content

Instantly share code, notes, and snippets.

@patriknw
patriknw / gist:4970804
Created February 17, 2013 09:45
Spotlight cluster registerOnMemberUp
Cluster(system) registerOnMemberUp {
system.actorOf(Props(new FactorialFrontend(upToN, repeat = true)),
name = "factorialFrontend")
}
@patriknw
patriknw / gist:4970806
Created February 17, 2013 09:46
Spotlight cluster singleton
system.actorOf(Props(new ClusterSingletonManager(
singletonProps = handOverData => Props[Master]),
singletonName = "master",
terminationMessage = PoisonPill)),
name = "singleton")
@patriknw
patriknw / gist:4970807
Last active December 13, 2015 20:38
Spotlight cluster singleton proxy
class MasterProxy extends Actor {
// subscribe to LeaderChanged, re-subscribe when restart
override def preStart(): Unit =
Cluster(context.system).subscribe(self, classOf[LeaderChanged])
override def postStop(): Unit =
Cluster(context.system).unsubscribe(self)
var leaderAddress: Option[Address] = None
def receive = {
@patriknw
patriknw / MessageDiscarder.scala
Created February 18, 2013 21:09
Inspiration for Akka mailing list question
import akka.actor._
object MessageDiscarder {
case object WorkerAvailable
}
class MessageDiscarder extends Actor {
import MessageDiscarder._
var queued: Option[(Any, ActorRef)] = None
@patriknw
patriknw / ClusterRegistrySpec.scala
Last active May 28, 2019 10:58
Example of how to implement a simple cluster wide actor registry.
/**
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.contrib.pattern
import language.postfixOps
import scala.concurrent.duration._
import com.typesafe.config.ConfigFactory
import akka.actor.Actor
@patriknw
patriknw / Backend.scala
Created June 10, 2013 18:23
Code for 2.2. Spotlight: Cluster Node Roles
class TransformationBackend extends Actor {
val cluster = Cluster(context.system)
override def preStart(): Unit =
cluster.subscribe(self, classOf[MemberUp])
override def postStop(): Unit =
cluster.unsubscribe(self)
def receive = {
case state: CurrentClusterState ⇒
@patriknw
patriknw / MemberAge.scala
Last active December 18, 2015 11:39
Code for 2.2 spotlight: Cluster Member Age
// sort by age, oldest first
val ageOrdering = Ordering.fromLessThan[Member] { (a, b) =>
a.isOlderThan(b)
}
var membersByAge: SortedSet[Member] = SortedSet.empty(ageOrdering)
def receive = {
case state: CurrentClusterState =>
membersByAge = SortedSet.empty(ageOrdering) ++ state.members
}
@patriknw
patriknw / MetricsMailbox.scala
Created June 15, 2013 03:39
Sample of mailbox extension that counts messages in queue
package akka.contrib.mailbox
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicInteger
import com.typesafe.config.Config
import akka.actor.{ ActorContext, ActorRef, ActorSystem, ExtendedActorSystem, Extension, ExtensionId, ExtensionIdProvider }
import akka.dispatch.{ Envelope, MailboxType, MessageQueue, UnboundedMailbox, UnboundedQueueBasedMessageQueue }
object MetricsMailboxExtension extends ExtensionId[MetricsMailboxExtension] with ExtensionIdProvider {
def lookup = this
@patriknw
patriknw / RegisterOnMemberUp.scala
Created July 4, 2013 08:13
Spotlight registerOnMemberUp
Cluster(system) registerOnMemberUp {
system.actorOf(Props(classOf[FactorialFrontend], upToN, true),
name = "factorialFrontend")
}
@patriknw
patriknw / Publisher.scala
Created July 5, 2013 06:33
Pub/Sub Spotlight
class Publisher extends Actor {
import DistributedPubSubMediator.Publish
// activate the extension
val mediator = DistributedPubSubExtension(context.system).mediator
def receive = {
case in: String ⇒
val out = in.toUpperCase
mediator ! Publish("content", out)
}