private Future<Recommendation> getDestinationWithReccomendation(Destination destination) {

    ActorRef pricingActor =
        SpringAppContext.actorSystem().actorOf(Props.create(PriceCalculationActor.class));
    ActorRef foreCastActor =
        SpringAppContext.actorSystem().actorOf(Props.create(WeatherForecastActor.class));

    final Future<Calculation> calculationFuture =
        toPrice(
            Patterns.ask(
                pricingActor,
                new PriceRequest("moon", destination.getDestination()),
                new Timeout(Duration.create(5, TimeUnit.SECONDS))));
    final Future<Forecast> forecastFuture =
        toForecast(
            Patterns.ask(
                foreCastActor,
                new WeatherRequest(destination.getDestination()),
                new Timeout(Duration.create(5, TimeUnit.SECONDS))));

    return calculationFuture
        .zip(forecastFuture)
        .map(
            new Mapper<Tuple2<Calculation, Forecast>, Recommendation>() {
              @Override
              public Recommendation apply(Tuple2<Calculation, Forecast> tuple) {
                return new Recommendation(
                    destination.getDestination(), tuple._2().getForecast(), tuple._1().getPrice());
              }
            },
            SpringAppContext.actorSystem().dispatcher());
  }
Exemplo n.º 2
0
 @Override
 public int hashCode() {
   return name.hashCode() + destination.getDestination().hashCode() + address.hashCode();
 }