我目前正在遵循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