내 간단한 Akka Camel
응용 프로그램이 설정되어 잘못된 SEDA 경로로 라우팅 메시지 :Akka 낙타 다음과 같이
AppleProducer -> seda:appleRoute -> AppleConsumer
OrangeProducer -> seda:orangeRoute -> OrangeConsumer
내가 비록보고하고하는 Apple
이벤트가 간헐적으로 그 반대의 경우도 마찬가지 OrangeConsumer
에 의해 소비하고되고 있다는 점이다.
이 예제를 실행하면 (아마도 몇 번) 아래에 다시 작성됩니다.
간헐적으로 어떻게 이런 일이 발생하는지 이해할 수 없습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
object TestApp extends App {
implicit val system = ActorSystem()
val camel = CamelExtension(system)
val appleProducer = system.actorOf(Props(classOf[MyProducer], "seda:appleRoute"), "AppleProducer")
system.actorOf(Props(classOf[MyAppleConsumer], "seda:appleRoute"), "AppleConsumer")
val orangeProducer = system.actorOf(Props(classOf[MyProducer], "seda:orangeRoute"), "OrangeProducer")
system.actorOf(Props(classOf[MyOrangeConsumer], "seda:orangeRoute"), "OrangeConsumer")
appleProducer ! new Apple("1")
orangeProducer ! new Orange("1")
appleProducer ! new Apple("2")
orangeProducer ! new Orange("2")
appleProducer ! new Apple("3")
orangeProducer ! new Orange("3")
appleProducer ! new Apple("4")
orangeProducer ! new Orange("4")
appleProducer ! new Apple("5")
orangeProducer ! new Orange("5")
appleProducer ! new Apple("6")
orangeProducer ! new Orange("6")
}
class MyProducer(route: String) extends Actor with ActorLogging {
def receive = {
case payload: Any =>
val template = CamelExtension(context.system).template
template.setDefaultEndpointUri(route)
template.sendBody(payload)
}
}
class MyAppleConsumer(route: String) extends Consumer with ActorLogging {
override def endpointUri: String = route
override def receive: Receive = {
case event: CamelMessage if event.body.isInstanceOf[Apple] =>
log.info("Received event {}", event.body)
case _ => throw new IllegalArgumentException("Invalid entity")
}
}
class MyOrangeConsumer(route: String) extends Consumer with ActorLogging {
override def endpointUri: String = route
override def receive: Receive = {
case event: CamelMessage if event.body.isInstanceOf[Orange] =>
log.info("Received event {}", event.body)
case _ => throw new IllegalArgumentException("Invalid entity")
}
}
class Apple(id: String)
class Orange(id: String)
내가 필요 난 당신이 같은 코드를 단순화 할 수 있어야한다고 생각 http://doc.akka.io/docs/akka/snapshot/scala/camel.html
을 내 프로듀서 (예제에서 생략 한)에서 사용자 지정 메시지 작성 논리를 추가하여 템플릿을 사용한 이유입니다. – DJ180