5

当一个应用程序分布在多个 JVM 上时,我的单吨类将在每个 JVM 上有多个实例。为此,我必须生成一个唯一 ID,我必须使用单例模式类。在独立环境中工作正常。如何在分布式环境中创建单例模式,以便我们只能使用一个实例?

编辑:对于我的应用程序,我需要创建用户 ID

如果名称类似于 Pavan Kumar,则用户 ID 应该是 pavankumar 如果系统中已经存在如果此用户 ID 存在,则用户 ID 应该类似于 pavankumar1、pavankumar2 等......

如果对具有相同名称的用户的多个请求来自不同的服务器,则可能会导致 id 重复。为此,我想在分布式环境中使用单例。

4

5 回答 5

3

你可以试试hazelcast [ doc ]。这个库允许你使用分布式锁和数据结构来编写你的单例。

于 2011-09-14T06:28:10.097 回答
3

很长一段时间后,我找到了这个问题的可靠答案。可以使用 AKKA 工具包在分布式环境中实现单例。可以从这里找到有关如何实施的详细信息http://doc.akka.io/docs/akka/2.3.1/contrib/cluster-singleton.html

于 2014-07-19T18:48:15.220 回答
2

您是否考虑过使用分布式缓存,例如Apache Commons的Java Caching System或Oracle 的Coherence Cache ?这可能是矫枉过正,但这真的取决于你到底想要做什么。

于 2011-09-14T04:31:46.767 回答
2

您可以使用中心位置(如数据库)来生成 ID。当然,您需要对资源进行适当的锁定,以便一次只能由一个实体修改它。

于 2011-09-14T05:17:34.997 回答
2

如果要将实体持久化到 db,则可以依靠 db 序列为您生成 id;简而言之,将解决方案从让多个 jvm 生成唯一 ID 转换为单个数据库来执行此操作。除此之外,还有像@nicholas 提到的解决方案,可以根据您的需求和规模加以利用。

于 2011-09-14T05:21:03.927 回答