=doc #3689 Make activator templates for camel samples
* @rkuhn found the problems in the scala camel samples - HttpSample returns scrambled data - CustomRouteSample times out
This commit is contained in:
parent
362074177a
commit
23dd957ba2
47 changed files with 693 additions and 559 deletions
|
|
@ -0,0 +1,58 @@
|
|||
package sample.camel
|
||||
|
||||
import org.apache.camel.Exchange
|
||||
import org.apache.camel.Processor
|
||||
import org.apache.camel.builder.RouteBuilder
|
||||
import akka.actor.Actor
|
||||
import akka.actor.ActorRef
|
||||
import akka.actor.ActorSystem
|
||||
import akka.actor.Props
|
||||
import akka.camel.CamelExtension
|
||||
import akka.camel.CamelMessage
|
||||
import akka.camel.Consumer
|
||||
import akka.camel.Producer
|
||||
|
||||
object CustomRouteExample {
|
||||
|
||||
def main(args: Array[String]): Unit = {
|
||||
val system = ActorSystem("some-system")
|
||||
val producer = system.actorOf(Props[RouteProducer])
|
||||
val mediator = system.actorOf(Props(classOf[RouteTransformer], producer))
|
||||
val consumer = system.actorOf(Props(classOf[RouteConsumer], mediator))
|
||||
CamelExtension(system).context.addRoutes(new CustomRouteBuilder)
|
||||
}
|
||||
|
||||
class RouteConsumer(transformer: ActorRef) extends Actor with Consumer {
|
||||
def endpointUri = "jetty:http://0.0.0.0:8877/camel/welcome"
|
||||
|
||||
def receive = {
|
||||
// Forward a string representation of the message body to transformer
|
||||
case msg: CamelMessage => transformer.forward(msg.withBodyAs[String])
|
||||
}
|
||||
}
|
||||
|
||||
class RouteTransformer(producer: ActorRef) extends Actor {
|
||||
def receive = {
|
||||
// example: transform message body "foo" to "- foo -" and forward result
|
||||
// to producer
|
||||
case msg: CamelMessage =>
|
||||
producer.forward(msg.mapBody((body: String) => "- %s -" format body))
|
||||
}
|
||||
}
|
||||
|
||||
class RouteProducer extends Actor with Producer {
|
||||
def endpointUri = "direct:welcome"
|
||||
}
|
||||
|
||||
class CustomRouteBuilder extends RouteBuilder {
|
||||
def configure {
|
||||
from("direct:welcome").process(new Processor() {
|
||||
def process(exchange: Exchange) {
|
||||
// Create a 'welcome' message from the input message
|
||||
exchange.getOut.setBody("Welcome %s" format exchange.getIn.getBody)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
package sample.camel
|
||||
|
||||
import org.apache.camel.Exchange
|
||||
import akka.actor.Actor
|
||||
import akka.actor.ActorRef
|
||||
import akka.actor.ActorSystem
|
||||
import akka.actor.Props
|
||||
import akka.actor.Status.Failure
|
||||
import akka.actor.actorRef2Scala
|
||||
import akka.camel.CamelMessage
|
||||
import akka.camel.Consumer
|
||||
import akka.camel.Producer
|
||||
|
||||
object HttpExample {
|
||||
|
||||
def main(args: Array[String]): Unit = {
|
||||
val system = ActorSystem("some-system")
|
||||
val httpTransformer = system.actorOf(Props[HttpTransformer])
|
||||
val httpProducer = system.actorOf(Props(classOf[HttpProducer], httpTransformer))
|
||||
val httpConsumer = system.actorOf(Props(classOf[HttpConsumer], httpProducer))
|
||||
}
|
||||
|
||||
class HttpConsumer(producer: ActorRef) extends Consumer {
|
||||
def endpointUri = "jetty:http://0.0.0.0:8875/"
|
||||
|
||||
def receive = {
|
||||
case msg => producer forward msg
|
||||
}
|
||||
}
|
||||
|
||||
class HttpProducer(transformer: ActorRef) extends Actor with Producer {
|
||||
// bridgeEndpoint=true makes the producer ignore the Exchange.HTTP_URI header,
|
||||
// and use the endpoint's URI for request
|
||||
def endpointUri = "jetty://http://akka.io/?bridgeEndpoint=true"
|
||||
|
||||
// before producing messages to endpoints, producer actors can pre-process
|
||||
// them by overriding the transformOutgoingMessage method
|
||||
override def transformOutgoingMessage(msg: Any) = msg match {
|
||||
case camelMsg: CamelMessage => camelMsg.copy(headers =
|
||||
camelMsg.headers(Set(Exchange.HTTP_PATH)))
|
||||
}
|
||||
|
||||
// instead of replying to the initial sender, producer actors can implement custom
|
||||
// response processing by overriding the routeResponse method
|
||||
override def routeResponse(msg: Any) { transformer forward msg }
|
||||
}
|
||||
|
||||
class HttpTransformer extends Actor {
|
||||
def receive = {
|
||||
case msg: CamelMessage =>
|
||||
sender ! (msg.mapBody { body: Array[Byte] =>
|
||||
new String(body).replaceAll("Akka ", "AKKA ")
|
||||
})
|
||||
case msg: Failure => sender ! msg
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package sample.camel
|
||||
|
||||
import akka.actor.ActorSystem
|
||||
import akka.actor.Props
|
||||
import akka.camel.Consumer
|
||||
|
||||
object QuartzExample {
|
||||
|
||||
def main(args: Array[String]): Unit = {
|
||||
val system = ActorSystem("my-quartz-system")
|
||||
system.actorOf(Props[MyQuartzActor])
|
||||
}
|
||||
|
||||
class MyQuartzActor extends Consumer {
|
||||
|
||||
def endpointUri = "quartz://example?cron=0/2+*+*+*+*+?"
|
||||
|
||||
def receive = {
|
||||
|
||||
case msg => println("==============> received %s " format msg)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue