2012-06-26 00:47:06 +02:00
|
|
|
package docs.camel
|
|
|
|
|
|
2012-06-26 10:43:31 +02:00
|
|
|
import akka.camel.CamelExtension
|
2012-07-22 21:40:09 +02:00
|
|
|
import language.postfixOps
|
2012-06-26 10:43:31 +02:00
|
|
|
|
2012-06-26 00:47:06 +02:00
|
|
|
object Producers {
|
2012-07-23 15:49:19 +02:00
|
|
|
object Sample1 {
|
2012-06-26 00:47:06 +02:00
|
|
|
//#Producer1
|
|
|
|
|
import akka.actor.Actor
|
2012-07-12 15:00:11 +02:00
|
|
|
import akka.actor.{ Props, ActorSystem }
|
|
|
|
|
import akka.camel.{ Producer, CamelMessage }
|
2012-06-26 10:43:31 +02:00
|
|
|
import akka.util.Timeout
|
2012-06-26 00:47:06 +02:00
|
|
|
|
|
|
|
|
class Producer1 extends Actor with Producer {
|
|
|
|
|
def endpointUri = "http://localhost:8080/news"
|
|
|
|
|
}
|
|
|
|
|
//#Producer1
|
2012-06-26 10:43:31 +02:00
|
|
|
//#AskProducer
|
|
|
|
|
import akka.pattern.ask
|
2012-09-21 14:50:06 +02:00
|
|
|
import scala.concurrent.duration._
|
2012-06-26 10:43:31 +02:00
|
|
|
implicit val timeout = Timeout(10 seconds)
|
|
|
|
|
|
|
|
|
|
val system = ActorSystem("some-system")
|
|
|
|
|
val producer = system.actorOf(Props[Producer1])
|
|
|
|
|
val future = producer.ask("some request").mapTo[CamelMessage]
|
|
|
|
|
//#AskProducer
|
|
|
|
|
}
|
2012-07-23 15:49:19 +02:00
|
|
|
object Sample2 {
|
2012-06-26 10:43:31 +02:00
|
|
|
//#RouteResponse
|
2012-07-12 15:00:11 +02:00
|
|
|
import akka.actor.{ Actor, ActorRef }
|
|
|
|
|
import akka.camel.{ Producer, CamelMessage }
|
|
|
|
|
import akka.actor.{ Props, ActorSystem }
|
2012-06-26 10:43:31 +02:00
|
|
|
|
|
|
|
|
class ResponseReceiver extends Actor {
|
|
|
|
|
def receive = {
|
2013-12-03 16:34:26 +01:00
|
|
|
case msg: CamelMessage =>
|
2012-07-12 15:00:11 +02:00
|
|
|
// do something with the forwarded response
|
2012-06-26 10:43:31 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Forwarder(uri: String, target: ActorRef) extends Actor with Producer {
|
|
|
|
|
def endpointUri = uri
|
|
|
|
|
|
|
|
|
|
override def routeResponse(msg: Any) { target forward msg }
|
|
|
|
|
}
|
|
|
|
|
val system = ActorSystem("some-system")
|
|
|
|
|
val receiver = system.actorOf(Props[ResponseReceiver])
|
2013-04-14 22:56:41 +02:00
|
|
|
val forwardResponse = system.actorOf(
|
|
|
|
|
Props(classOf[Forwarder], this, "http://localhost:8080/news/akka", receiver))
|
2012-06-26 10:43:31 +02:00
|
|
|
// the Forwarder sends out a request to the web page and forwards the response to
|
|
|
|
|
// the ResponseReceiver
|
|
|
|
|
forwardResponse ! "some request"
|
|
|
|
|
//#RouteResponse
|
2012-06-26 00:47:06 +02:00
|
|
|
}
|
2012-07-23 15:49:19 +02:00
|
|
|
object Sample3 {
|
2012-06-26 10:43:31 +02:00
|
|
|
//#TransformOutgoingMessage
|
|
|
|
|
import akka.actor.Actor
|
2012-07-12 15:00:11 +02:00
|
|
|
import akka.camel.{ Producer, CamelMessage }
|
2012-06-26 10:43:31 +02:00
|
|
|
|
|
|
|
|
class Transformer(uri: String) extends Actor with Producer {
|
|
|
|
|
def endpointUri = uri
|
|
|
|
|
|
2012-07-12 15:00:11 +02:00
|
|
|
def upperCase(msg: CamelMessage) = msg.mapBody {
|
2013-12-03 16:34:26 +01:00
|
|
|
body: String => body.toUpperCase
|
2012-06-26 10:43:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override def transformOutgoingMessage(msg: Any) = msg match {
|
2013-12-03 16:34:26 +01:00
|
|
|
case msg: CamelMessage => upperCase(msg)
|
2012-06-26 10:43:31 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//#TransformOutgoingMessage
|
|
|
|
|
}
|
2012-07-23 15:49:19 +02:00
|
|
|
object Sample4 {
|
2012-06-26 10:43:31 +02:00
|
|
|
//#Oneway
|
2012-07-12 15:00:11 +02:00
|
|
|
import akka.actor.{ Actor, Props, ActorSystem }
|
2012-06-26 10:43:31 +02:00
|
|
|
import akka.camel.Producer
|
|
|
|
|
|
2012-07-12 15:00:11 +02:00
|
|
|
class OnewaySender(uri: String) extends Actor with Producer {
|
2012-06-26 10:43:31 +02:00
|
|
|
def endpointUri = uri
|
|
|
|
|
override def oneway: Boolean = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val system = ActorSystem("some-system")
|
2013-04-14 22:56:41 +02:00
|
|
|
val producer = system.actorOf(Props(classOf[OnewaySender], this, "activemq:FOO.BAR"))
|
2012-06-26 10:43:31 +02:00
|
|
|
producer ! "Some message"
|
|
|
|
|
//#Oneway
|
|
|
|
|
|
|
|
|
|
}
|
2012-07-23 15:49:19 +02:00
|
|
|
object Sample5 {
|
2012-06-26 10:43:31 +02:00
|
|
|
//#Correlate
|
2012-07-12 15:00:11 +02:00
|
|
|
import akka.camel.{ Producer, CamelMessage }
|
2012-06-26 10:43:31 +02:00
|
|
|
import akka.actor.Actor
|
2012-07-12 15:00:11 +02:00
|
|
|
import akka.actor.{ Props, ActorSystem }
|
2012-06-26 10:43:31 +02:00
|
|
|
|
|
|
|
|
class Producer2 extends Actor with Producer {
|
2012-07-15 14:12:03 +02:00
|
|
|
def endpointUri = "activemq:FOO.BAR"
|
2012-06-26 10:43:31 +02:00
|
|
|
}
|
|
|
|
|
val system = ActorSystem("some-system")
|
|
|
|
|
val producer = system.actorOf(Props[Producer2])
|
|
|
|
|
|
|
|
|
|
producer ! CamelMessage("bar", Map(CamelMessage.MessageExchangeId -> "123"))
|
|
|
|
|
//#Correlate
|
|
|
|
|
}
|
2012-07-23 15:49:19 +02:00
|
|
|
object Sample6 {
|
2012-06-26 10:43:31 +02:00
|
|
|
//#ProducerTemplate
|
|
|
|
|
import akka.actor.Actor
|
|
|
|
|
class MyActor extends Actor {
|
2012-07-12 15:00:11 +02:00
|
|
|
def receive = {
|
2013-12-03 16:34:26 +01:00
|
|
|
case msg =>
|
2012-07-12 15:00:11 +02:00
|
|
|
val template = CamelExtension(context.system).template
|
|
|
|
|
template.sendBody("direct:news", msg)
|
|
|
|
|
}
|
2012-06-26 10:43:31 +02:00
|
|
|
}
|
|
|
|
|
//#ProducerTemplate
|
|
|
|
|
}
|
2012-07-23 15:49:19 +02:00
|
|
|
object Sample7 {
|
2012-06-26 10:43:31 +02:00
|
|
|
//#RequestProducerTemplate
|
|
|
|
|
import akka.actor.Actor
|
|
|
|
|
class MyActor extends Actor {
|
|
|
|
|
def receive = {
|
2013-12-03 16:34:26 +01:00
|
|
|
case msg =>
|
2012-06-26 10:43:31 +02:00
|
|
|
val template = CamelExtension(context.system).template
|
2014-01-16 15:16:35 +01:00
|
|
|
sender() ! template.requestBody("direct:news", msg)
|
2012-06-26 10:43:31 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//#RequestProducerTemplate
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|