我目前正在遵循http://doc.akka.io/docs/akka/snapshot/scala/camel.html中的akka-camel集成示例。
作为传输,我使用jetty: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声明错误。
de.spring.cases.infrastructure.SerializationSpec.B : akka.camel.AkkaCamelException:没有可用的类型转换器从类型: java.io.InputStream转换为所需的类型:java.io.InputStream值为B(hello)。
原因如下:
org.apache.camel.NoTypeConversionAvailableException:没有可用的类型转换器从type: de.spring.cases.infrastructure.SerializationSpec.B转换为所需的类型:在org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:169) at org.apache.camel.component.jetty.JettyHttpProducer.createHttpExchange(JettyHttpProducer.java:135) at org.apache.camel.component.jetty.JettyHttpProducer.process(JettyHttpProducer.java:75)上有值B的java.io.InputStream (Hello)在org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122) at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:117) at akka.camel.ProducerSupport$ProducerChild.produce(Producer.scala:137) at akka.camel.ProducerSupport$ProducerChild$$anonfun$receive$1.applyOrElse(Producer.scala:111)
在对象和ArrayByte之间使用显式(自己)序列化/反序列化时,一切都进行得很顺利。
我读过关于Camels TypeConversions的文章,并想知道是否有一种内部方法可以将消息从/转到可序列化的对象。看到接收方,最好直接使用接收函数中的“普通”scala模式匹配来使用消息。没有任何额外的分派使用额外的字段和手动转码。
有什么建议吗?
发布于 2014-03-18 18:48:53
从骆驼码中,主体内容需要是一个InputStream。因此,您必须将B对象转换为InputStream,并将其发送给生产者。在Java中,就像这一样
https://stackoverflow.com/questions/22400064
复制相似问题