2014-03-14 3 views
2

저는 현재 akka-camel 통합 예제 인 http://doc.akka.io/docs/akka/snapshot/scala/camel.html을 따르고 있습니다.akka camel 사례 클래스를 메시지로 보내기

val sys = ActorSystem("some-system") 
val orders = sys.actorOf(Props[Orders]) 
val endp = sys.actorOf(Props[MyEndpoint]) 

orders ? "hello" 

같은 간단한 텍스트 메시지를 보낼 때

class MyEndpoint extends Consumer { 
    def endpointUri = "jetty:http://0.0.0.0:8877/" 
    def receive = { 
    case msg: CamelMessage => { println("here", msg); sender ! "ok"} 
    case _     => { println("somewhere else") } 
    } 
} 

모두 잘 작동 엔드 포인트에 대한 동일한

class Orders extends Actor with Producer { 
def endpointUri = "jetty:http://localhost:8877/" 
} 

처럼 HTTP : 교통으로

나는 부두를 사용하고 있습니다 하지만 사례 클래스를 보낼 때 상황이 작동하지 않습니다.

case class B(id:String) 

orders ? B("hello") 

출력 내용의 TypeConversion에 오류

akka.camel.AkkaCamelException : 필요한 에 de.spring.cases.infrastructure.SerializationSpec.B을 : 유형에서 을 변환하는 데 사용할 형식 변환기 타입 :

,617,451 : 값 B (헬로) 와 java.io.InputStream을 ...

에 의한

org.apache.camel.NoTypeConversionAvailableException : de.spring.cases.infrastructure.SerializationSpec.B를 유형으로 변환 할 수있는 유형 변환기 : 값이 B (hello) 인 java.io.InputStream at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo org.apache에서 org.apache.camel.component.jetty.JettyHttpProducer.createHttpExchange (JettyHttpProducer.java:135)에서 (BaseTypeConverterRegistry.java:169) .camel.component.jetty.JettyHttpProducer.process (JettyHttpProducer.java:75) at org.apache.camel.util.AsyncProcessorHelper.process (AsyncProcessorHelper.java:73) org.apache에서 org.apache.camel.impl.ProducerCache.doInAsyncProducer (ProducerCache.java:298) 에서 org.apache.camel.processor.SendProcessor $ 2.doInAsyncProducer (SendProcessor.java:122) 210. akka.camel.ProducerSupport $ ProducerChild.produce (Producer.scala : 137)에서 camel.processor.SendProcessor.process (SendProcessor.java:117) akka.camel.ProducerSupport $ ProducerChild $$ anonfun $에서 $ 1을받을 수 있습니다. applyOrElse (Producer.scala : 111) ... 9 개

명시 적으로 (자신의) 직렬화를 사용하여/역 직렬화 betwee Object와 Array [Byte]를 사용하면 모든 것이 잘됩니다.

필자는 Camels TypeConversions 및 wonder에 대해 읽었습니다. 내부적으로 메시지를 직렬화 가능 객체에서 /로 변환하는 방법이 있다면 궁금합니다. 그리고 수신 측을 보면 수신 기능에서 '정상'스칼라 패턴 일치를 사용하여 메시지를 직접 사용하는 것이 좋습니다. 추가 필드 및 수동 트랜스 코딩을 사용하여 추가 디스 패칭없이.

제안 사항?

답변

0

Camel code에서 본문 내용은 InputStream이어야합니다. 따라서 B Object를 InputStream으로 변환하여 Producer로 보내야합니다. Java에서는 this

+0

처럼 "수동으로"라고합니다. 나는 그 동안 경로에 전환을 추가하는 것이 문제를 해결할 수 있다는 것을 알아 냈습니다. 하지만 여전히 수동으로 정렬됩니다. – cybye

관련 문제