2010-03-01 8 views
2

Je dois identifier de manière unique les messages dans mon application. Ainsi, chaque message devrait contenir son identifiant. J'ai quelques questions cependant ..Création d'un ID de message dans Java

  1. Le message devrait-il générer son identifiant en privé et ne fournir que getter pour l'identifiant?
  2. Quelle est la meilleure façon de créer des ID? Toute alternative à la classe UUID en Java?

Merci.

Répondre

6
  1. De toute évidence, l'ID ne devrait pas avoir un setter public. Une alternative au fait que le message génère l'ID lui-même est de le passer dans le constructeur.
  2. Si votre application est distribuée, il n'y a pas d'alternative réelle à un UUID. Si ce n'est pas distribué, AtomicInteger ou AtomicLong sont de bonnes alternatives qui peuvent être utilisées simultanément sans verrouillage.
+0

Mon application est distribuée. Franchement, le message devrait générer un identifiant par lui-même. Que diriez-vous de l'horodatage? – Sorantis

+0

avec un horodatage: vous trouverez plus difficile de traiter les problèmes de synchronisation d'horloge IMO ... – jldupont

+2

"Que pensez-vous de l'horodatage?" Les messages peuvent-ils provenir de plus d'une machine? Ensuite, vous avez une collision possible. Même si ce n'est pas le cas, vous devez vous assurer que deux messages ne peuvent pas être créés dans la granularité de l'horodatage (par exemple deux messages créés au cours de la même millisec si l'horodatage est inférieur à la milliseconde). – Kris

2

Sans plus de contexte, je répondrais: si vous êtes préoccupé par la vitesse, vous pouvez toujours avoir un processus (sur une autre machine?) Pré-calculer les UUID pour l'application. De cette façon, l'application pourrait avoir un accès rapide à un "pool" d'UUID.

  1. Il ne devrait pas être possible de changer l'UID d'un message ou bien quel est le point?

  2. Qu'est-ce qui ne va pas avec la classe UUID? s'il s'agit de vitesse, alors voir ci-dessus.