【问题标题】:How to Handle Singleton Classes in Distributed Environment如何在分布式环境中处理单例类
【发布时间】:2023-03-22 09:27:02
【问题描述】:

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

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

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

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

【问题讨论】:

  • “我必须为此目的生成一个唯一 ID”你是什么意思?您希望所有 signlton 类都使用相同的 id 吗?
  • 在我的应用程序中,我需要为每个用户生成一个唯一的 id .....
  • 也许可以多描述一下为什么需要这个单例对象——它是什么时候创建和访问的,如果在不同的机器上有多个实例,为什么会出现问题?
  • @Sannisetty Pavan 这是否意味着您的应用程序中有一个为每个用户创建 UUID 的类,并且您想让该类成为单例?在这种情况下,如果在所有 VM 上都创建了此类,会出现什么问题。如果可能,请发布有问题的代码。
  • 我需要在 Tivoli Directory Server LDAP 中创建它........

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-11-16
            • 1970-01-01
            • 1970-01-01
            • 2012-07-06
            • 2019-04-28
            • 2011-09-08
            • 2010-12-07
            相关资源
            最近更新 更多