sentenza
sentenza

Reputation: 1730

Starting two Scala Finagle ListeningServers at once

I need to start two Finagle ListeningServers at once because I have to implement two different traits that extend ListeningServer.

/* A simplified example to give you an idea of what I'm trying to do */

trait FirstListeningServer extends ListeningServer {

  def buildFirstServer() = ???

  def main(): Unit = {
    val server = buildFirstServer()
    closeOnExit(server)
    Await.ready(server)
  }

}

trait SecondListeningServer extends ListeningServer {

  def buildSecondServer() = ???

  def main(): Unit = {
    val server = buildSecondServer()
    closeOnExit(server)
    Await.ready(server)
  }

}

Basically, each ListeningServer is a com.twitter.util.Awaitable and whenever I have to instantiate a new ListeningServer I use Await.ready(myListeningServer).

class MyServer extends FirstListeningServer with SecondListeningServer {

  override def main(): Unit = {
    val firstServer = buildFirstServer()
    closeOnExit(firstServer)
    val secondServer = buildSecondServer()
    closeOnExit(secondServer)
    Await.all(firstServer, secondServer)
  }
}

Now I'm not sure if using Await.all() is the right choice in order to start several ListeningServers concurrently. I would have used com.twitter.util.Future.collect() but I have two Awaitables.

def all(awaitables: Awaitable[_]*): Unit

Returns after all actions have completed.

I'm using Scala 2.12 and Twitter 20.3.0.

Upvotes: 1

Views: 89

Answers (1)

Hartmut Pfarr
Hartmut Pfarr

Reputation: 6149

com.twitter.util.Await.all(listeningServer1, listeningServer2)

will start both in parallel.

Independent from this You can stop them both e.g. with the help of:

  listeningServer1.close(10.seconds)
  listeningServer2.close(10.seconds)

Upvotes: 0

Related Questions