저는 현재 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에 대해 읽었습니다. 내부적으로 메시지를 직렬화 가능 객체에서 /로 변환하는 방법이 있다면 궁금합니다. 그리고 수신 측을 보면 수신 기능에서 '정상'스칼라 패턴 일치를 사용하여 메시지를 직접 사용하는 것이 좋습니다. 추가 필드 및 수동 트랜스 코딩을 사용하여 추가 디스 패칭없이.
제안 사항?
처럼 "수동으로"라고합니다. 나는 그 동안 경로에 전환을 추가하는 것이 문제를 해결할 수 있다는 것을 알아 냈습니다. 하지만 여전히 수동으로 정렬됩니다. – cybye