Skip to content

Instantly share code, notes, and snippets.

@krasserm
Created February 28, 2011 06:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krasserm/847006 to your computer and use it in GitHub Desktop.
Save krasserm/847006 to your computer and use it in GitHub Desktop.
Akka producer actors best practices - Part 1
CamelContextManager.init
CamelContextManager.start
import akka.actor._
import akka.camel._
class HttpProducer extends Actor with Producer {
def endpointUri = "jetty:http://localhost:8080/test"
}
implicit val sender: Option[ActorRef] = ...
httpProducer ! "test"
val httpProducer = Actor.actorOf[HttpProducer].start
httpProducer !! "test" match {
case Some(Message(body, headers)) => println("body = %s, headers = %s" format (body, headers))
case _ => ...
}
httpProducer !! "test" match {
case Some(Message(body, headers)) => println("body = %s, headers = %s" format (body, headers))
case Some(Failure(cause, headers)) => println("failure cause = %s, headers = %s" format (cause, headers))
case None => println("timeout")
}
class JmsProducer extends Actor with Producer {
def endpointUri = "jms:queue:test"
override def oneway = true
}
class JmsReplyingProducer extends Actor with Producer {
def endpointUri = "jms:queue:test"
override def oneway = true
override def receiveAfterProduce = {
case _ => self.reply("done")
}
}
class JmsReplyingProducer extends Actor with Producer {
def endpointUri = "jms:queue:test"
override def oneway = true
override def receiveAfterProduce = {
case message: Message => self.reply("done")
case failure: Failure => self.reply("message could not be added to queue: %s" format failure.cause.getMessage)
}
}
trait Producer {
// ...
protected def receiveAfterProduce: Receive = {
case msg => if (!oneway) self.reply(msg)
}
// ...
}
class SomeProducer extends Actor with Producer {
// ...
override def receiveAfterProduce = {
case Failure(cause, _) => throw cause
// ...
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment