不确定未来是否会立即出现或失败

时间:2016-12-06 13:50:28

标签: scala akka future

我有以下演员:

class SomeActor extends Actor with ActorLogging {
  override def receive: Receive = {
    case StartMessage =>
  //check if the job is still running
  val address = url("http://mywebsite.com")
  val status: Future[String] = Await.ready(Http(address OK as.String), 1 second)
  val now = Calendar.getInstance().getTime()
  println("TIME NOW: " + now)

  status onComplete {
    case Success(message) => sender ! SomeMessage(message)
    case Failure(_) => {
      val then = Calendar.getInstance().getTime()
      sender ! SomeMessage("Not running")
      println("TIME THEN: " + then)
    }
   }

我正在测试它:

  it should "check the id of a submitted job" in new Scope {
    myActorRef ! StartMessage
    expectMsg(SomeMessage("Not running"))   
  }

问题是我得到了

java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for SomeMessage(Not running)

所以看来我未来的时间已经过去了,因为我只等了1秒就不应该这样。

然而,这也是印刷的。

TIME NOW: Tue Dec 06 13:39:13 GMT 2016
TIME THEN: Tue Dec 06 13:39:13 GMT 2016

由此看来,启动后未来会立即失败。

那是哪个?

1 个答案:

答案 0 :(得分:0)

我遇到了“关闭发件人”的问题,这里有很好的解释:

http://helenaedelson.com/?p=879

基本上,我在另一个帖子中回复sender,因此sender对象可能与主线程中的对象不同。

我只需要在开头添加:

val requestor = sender 

并改为:

requestor ! SomeMessage(message)

requestor ! SomeMessage("Not running")