我目前正在遵循http://doc.akka.io/docs/akka/snapshot/scala/camel.html中的akka-camel集成示例。阿卡駱駝發送案例類作爲消息
由於運輸我使用碼頭:HTTP,像
class Orders extends Actor with Producer {
def endpointUri = "jetty:http://localhost:8877/"
}
同爲端點
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") }
}
}
所有發送簡單的文本的消息像
val sys = ActorSystem("some-system")
val orders = sys.actorOf(Props[Orders])
val endp = sys.actorOf(Props[MyEndpoint])
orders ? "hello"
時工作正常但發送案例類時不起作用
個case class B(id:String)
orders ? B("hello")
輸出狀態與TypeConversion錯誤
akka.camel.AkkaCamelException:沒有可用的類型轉換器轉換 從類型:de.spring.cases.infrastructure.SerializationSpec.B到所需的 類型:與的java.io.InputStream值B(你好) ...
引起:
org.apache.camel.NoTypeConversionAvailableException:無類型轉換器 可用於從類型: de.spring.cases.infrastructure.SerializationSpec.B轉換爲所需的 類型:值爲B(hello)的java.io.InputStream at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:169) 在 org.apache.camel.component.jetty.JettyHttpProducer.createHttpExchange(JettyHttpProducer.java:135) 在 org.apache .camel.component.jetty.JettyHttpProducer.process(JettyHttpProducer.java:75) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) org.apache.camel.processor.SendProcessor $ 2.doInAsyncProducer(SendProcessor.java:122) 在 org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298) 在 org.apache。 camel.processor.SendProcessor.process(SendProcessor.java:117) 在 akka.camel.ProducerSupport $ ProducerChild.produce(Producer.scala:137) 在 akka.camel.ProducerSupport $ $$ ProducerChild $ anonfun接收$ 1中。 applyOrElse(Producer.scala:111) ... 9個
當使用一個明確的(自己的)的序列化/反序列化betwee對象和數組[字節],事情進展順利。
我讀了關於駱駝TypeConversions並想知道,如果有一個內部的方式如何轉換消息從/到可序列化的對象。並且看到接收方,直接使用接收函數中的'正常'scala模式匹配來使用消息將是非常好的。沒有使用額外字段和手動轉碼的額外調度。
有什麼建議嗎?
這就是我所說的「手動」。同時我發現,將轉換添加到路線中可能會解決問題。但仍然有點手動。 – cybye