Scala 如何在演员之间或演员与未来之间传递信息?

Scala 如何在演员之间或演员与未来之间传递信息?,scala,akka,Scala,Akka,来自程序主方法的future向其参与者发送消息,请求一个iterable对象。然后,参与者创建另一个未来,要求远程参与者提供iterable对象(比如ArrayBuffer)。在从远程参与者接收到ArrayBuffer之后,参与者将如何在main方法中将其发送回第一个未来?似乎创建sender的本地别名并创建单独的case类来表示iterable并不能防止遇到死信 下面是一个示例代码: case class SequenceObject(sqnce:Seq[someArrayBuffer])

来自程序主方法的future向其参与者发送消息,请求一个iterable对象。然后,参与者创建另一个未来,要求远程参与者提供iterable对象(比如ArrayBuffer)。在从远程参与者接收到ArrayBuffer之后,参与者将如何在main方法中将其发送回第一个未来?似乎创建
sender
的本地别名并创建单独的case类来表示iterable并不能防止遇到
死信

下面是一个示例代码:

case class SequenceObject(sqnce:Seq[someArrayBuffer])

//...

implicit val timeout = Timeout(10 seconds)
val fut1: Future[Any] = myActor ? iNeedAnArrayBufferObject 

fut1.onSuccess {
  case listOfItems: SequenceObject => {
    //do sth with listofItems.sqnce
  }

class myActor extends Actor {
  implicit val timeout = Timeout(1 seconds)

  def receive = {
  case a: iNeedAnArrayBufferObject => {
    val originalSender = sender
    val fut: Future[Any] = (remoteActor ? a) 
    fut.onSuccess {
      case list: SequenceObject => {
        originalSender ! SequenceObject(list.sqnce)
   }    
}
远程参与者代码为:

class ServerActorClass extends Actor {
  def receive = {
    case a: iNeedAnArrayBufferObject => {
      val closer = sender()

      closer ! SequenceObject(ArrayBufferObject[information])
    }
  }

上述情况似乎不起作用。远程参与者和本地参与者可以通信并正确接收消息。但是,iterable对象永远不会发送回fut1。为什么呢?提前感谢。

签入询问:发送和接收未来部分

你能发布完整的代码吗?如果你想发送
未来
到actorTry而不使用未来,你需要使用
管道
模式。根据我的经验,混合期货和参与者是一种代码气味。@ViktorKlang如果不使用期货,我怎样才能将我需要的数据从clientActor返回到客户端对象?@1xQ:什么是客户端对象?