2016-10-03 1 views
1

Comment fournir une API réactive pour une base de données qui ne prend pas en charge la diffusion en continu? Comme disons par exemple dynamodb. Lors d'un appel get, dynamodb va retourner tous les résultats. Donc, même si j'enveloppe l'appel get dans une source, comment gérer la contre-pression depuis les étapes en aval? Comment puis-je implémenter des appels en écriture dans db? À quoi ressemblera mon lavabo? Toute indication à ce sujet sera utile.Fourniture d'une API réactive à une base de données

Répondre

0

Une option consiste à mettre en œuvre votre base de données Source en utilisant un ActorPublisher -

Voir: http://doc.akka.io/docs/akka/2.4.11/scala/stream/stream-integrations.html#ActorPublisher

mélange juste dans ce trait et la mise en œuvre de l'interface de commande vous donnera un flux réactif éditeur de données compatibles qui peuvent poignée vers le bas la contre-pression du flux. Votre éditeur obtiendra un message Request si les abonnés en aval tirent plus de données et auront accès à la demande perçue actuelle s'il a besoin de pousser activement plus de données en aval. Vous pouvez ensuite brancher cet éditeur dans votre pipeline Streams Akka en créant un Source de celui-ci:

Source.actorPublisher[Data](MyPublisher.props).runWith(MySink) 

Pour faire face au fait que lui-même DB est sous-jacente ne réagit pas, vous devez mettre en œuvre une logique de mise en mémoire tampon et des sondages au sein le ActorPublisher.