首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >akka骆驼发送案例类作为消息

akka骆驼发送案例类作为消息
EN

Stack Overflow用户
提问于 2014-03-14 08:48:04
回答 1查看 871关注 0票数 2

我目前正在遵循http://doc.akka.io/docs/akka/snapshot/scala/camel.html中的akka-camel集成示例。

作为传输,我使用jetty:http,就像

代码语言:javascript
复制
class Orders extends Actor with Producer  {
 def endpointUri = "jetty:http://localhost:8877/"
}

端点相同

代码语言:javascript
复制
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") }
  }
}

当发送简单的文本消息时,所有功能都很好,例如

代码语言:javascript
复制
val sys = ActorSystem("some-system")
val orders = sys.actorOf(Props[Orders])
val endp = sys.actorOf(Props[MyEndpoint])

orders ? "hello"

但是当发送案例类时,事情就不起作用了。

代码语言:javascript
复制
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模式匹配来使用消息。没有任何额外的分派使用额外的字段和手动转码。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2014-03-18 18:48:53

骆驼码中,主体内容需要是一个InputStream。因此,您必须将B对象转换为InputStream,并将其发送给生产者。在Java中,就像一样

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22400064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档