Reputation: 1730
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 ListeningServer
s concurrently. I would have used com.twitter.util.Future.collect()
but I have two Awaitable
s.
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
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