pekko/akka-docs/rst/scala/code/docs/camel/Producers.scala

129 lines
3.6 KiB
Scala
Raw Normal View History

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
object Producers {
2012-07-23 15:49:19 +02:00
object Sample1 {
//#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
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
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 = {
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])
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-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 {
body: String => body.toUpperCase
2012-06-26 10:43:31 +02:00
}
override def transformOutgoingMessage(msg: Any) = msg match {
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")
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 = {
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 = {
case msg =>
2012-06-26 10:43:31 +02:00
val template = CamelExtension(context.system).template
sender() ! template.requestBody("direct:news", msg)
2012-06-26 10:43:31 +02:00
}
}
//#RequestProducerTemplate
}
}