Laissez-moi d'abord expliquer un peu mon problème. J'ai un référentiel qui stocke tous les ID connus. Et ce référentiel est un acteur, appelez-le repo
. J'ai défini GetId(id: Id)
message et GetIdReply(Option[Id])
dans cet acteur afin de demander un identifiant spécifique et obtenir une réponse si elle existe déjà ou non. Assez direct je dirais.Utilisation de scala + akka pour générer un identifiant unique
Maintenant, j'ai un autre acteur qui est responsable de la génération d'un ID unique. J'ai donc essayé de mettre en œuvre cette fonction comme:
private def getUniqueId(): Id = {
implicit val timeout = Timeout(500.millis)
var id = Id(UUID.randomUUID().toString)
val getIdReply = repo ? GetId(Id)
getIdReply.mapTo[GetIdReply] onSuccess {
case success =>
success.id match {
case Some(matchedId) =>
// Generated ID already exists, let's call this function recursively
id = getUniqueId
case None =>
// Generated ID is OK
}
}
id
}
J'ai essayé de mettre en œuvre cela comme une récursion et cette chose ne fonctionne que si l'identifiant généré est unique sur la première tentative. Sur la deuxième et toutes les autres tentatives, cela ne fonctionne pas. Donc, ma question ici est de savoir comment construire correctement une telle fonction qui "boucle" jusqu'à ce que l'ID soit vraiment unique?
Thx!
Meilleur