2017-09-30 4 views

Répondre

7

Le second paramètre est la valeur matérialisée, c'est-à-dire lorsque vous exécutez la source, c'est la valeur qui est renvoyée par la méthode run. Toutes les formes de flux dans les ruisseaux Akka en ont, c'est-à-dire sources, puits, flux, bidiflows, etc. Avec les puits, c'est vraiment évident, si vous pliez le flux, vous allez vous retrouver avec une seule valeur, valeur est donnée à vous par la valeur matérialisée, ce qui est un avenir du résultat:

def fold[U, T](zero: U)(f: (U, T) ⇒ U): Sink[T, Future[U]] 

pour les sources cependant, il est moins évident, mais voici un exemple:

def actorRef[T](bufferSize: Int, overflowStrategy: OverflowStrategy): Source[T, ActorRef] 

Ceci est un Source que , lorsque vous l'exécutez, se matérialise par un ActorRef. Chaque message que vous envoyez à l'acteur sera émis par la source. Si vous vouliez l'utiliser dans Lagom, vous feriez quelque chose comme ceci:

def stream = ServiceCall { _ => 
    Source.actorRef[String](16, OverflowStrategy.dropHead) 
    .mapMaterializedValue { actor => 
     // send messages here, or maybe pass the actor to somewhere else 
     actor ! "Hello world" 
     // And return NotUsed so that it now materializes to `NotUsed`, as required by Lagom 
     NotUsed 
    } 
}