如何在分布式环境中处理单例类

时间:2011-09-14 04:25:12

标签: java java-ee singleton cluster-computing distributed-objects

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

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

这样的用户ID

如果名称像Pavan Kumar那么userid应该是pavankumar,如果在系统中已经存在这个用户名,那么userid应该像pavankumar1,pavankumar2等......

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

5 个答案:

答案 0 :(得分:3)

您可以尝试hazelcast [doc]。此库允许您使用分布式锁和数据结构来编写单例。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

您是否考虑过使用Apache Commons的Java Caching System或Oracle的Coherence Cache等分布式缓存?这可能有些过分,但这实际上取决于你想要做什么。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

如果要将实体持久保存到db,则可以依赖db序列生成id;简而言之,将多个jvm生成唯一id的解决方案转换为单个db。除此之外,还有像@nicholas这样的解决方案可以根据您的需求和规模进行利用。