in discovery-aws-api/src/main/scala/org/apache/pekko/discovery/awsapi/ec2/Ec2TagBasedServiceDiscovery.scala [160:183]
override def lookup(query: Lookup, resolveTimeout: FiniteDuration): Future[Resolved] =
Future.firstCompletedOf(
Seq(
after(resolveTimeout, using = system.scheduler)(
Future.failed(new TimeoutException(s"Lookup for [$query] timed-out, within [$resolveTimeout]!"))),
lookup(query)))
def lookup(query: Lookup): Future[Resolved] = {
val tagFilter = new Filter("tag:" + tagKey, List(query.serviceName).asJava)
val allFilters: List[Filter] = runningInstancesFilter :: tagFilter :: otherFilters
Future {
getInstances(ec2Client, allFilters, None).flatMap((ip: String) =>
preDefinedPorts match {
case None =>
ResolvedTarget(host = ip, port = None, address = Try(InetAddress.getByName(ip)).toOption) :: Nil
case Some(ports) =>
ports.map(p => ResolvedTarget(host = ip, port = Some(p), address = Try(InetAddress.getByName(ip)).toOption)) // this allows multiple pekko nodes (i.e. JVMs) per EC2 instance
})
}.map(resoledTargets => Resolved(query.serviceName, resoledTargets))
}