Java 需要跨jvm时如何逐个生成id

Java 需要跨jvm时如何逐个生成id,java,jvm,Java,Jvm,我需要生成id,生成规则由我定义。例如: 0x-111-111-PX-2013-11-11-00001 0x-111-111-PX-2013-11-11-00002 在单个jvm中很容易做到这一点。问题是,我需要跨jvm 跨jvm意味着从不同的机器生成唯一的id 1) 您可以使用带有存储过程的数据库,该存储过程将根据需要生成下一个id 2) Java应用程序(服务)仅为id生成目的运行,可通过例如RMI访问 3) 其他java应用程序将使用相同的算法更新的共享文件生成随机数或随机字符串(UUID

我需要生成id,生成规则由我定义。例如:

  • 0x-111-111-PX-2013-11-11-00001

  • 0x-111-111-PX-2013-11-11-00002

  • 在单个jvm中很容易做到这一点。问题是,我需要跨jvm

    跨jvm意味着从不同的机器生成唯一的id

    1) 您可以使用带有存储过程的数据库,该存储过程将根据需要生成下一个id

    2) Java应用程序(服务)仅为id生成目的运行,可通过例如RMI访问


    3) 其他java应用程序将使用相同的算法更新的共享文件生成随机数或随机字符串(UUID)始终是一个挑战。即使是通常的
    java.util.Random
    也是如此。您已经排除了使用datbase的可能性,这将确保JVM中的随机性

    这个问题与web容器生成唯一会话id所面临的挑战类似。只要涉及单个JVM,就可以保证唯一性。但在现实世界中,情况并非如此。典型的web应用程序是跨服务器集群部署的。负载平衡器根据会话id将请求转发到相应的服务器

    由于跨JVM不能保证会话id的唯一性,因此每台服务器都会向会话id追加一个唯一标识符(例如node1),以确保即使两台服务器生成相同的会话id,追加的字符串也会保持唯一性

    将此扩展到您的案例中,您始终可以将JVM特定的标识符放入id中,因此生成的id可能如下所示:

  • 0x-111-111-PX-2013-11-11-00001-M1
  • 0x-111-111-PX-2013-11-11-00001-M2
  • 可以将M1/M2放在字符串中的任意位置


    我不知道你可能有任何强迫(在ID上),但这只是一个想法

    需要有人帮助的进一步说明。目前还不清楚您当前是如何生成的,以及您希望如何处理。我需要跨jvm。。。。它在不同的机器或不同版本的jvm上意味着什么?您需要从不同的机器生成唯一的id吗????耶,跨jvm意味着从不同的机器生成唯一的id。简言之,我的应用程序可以部署在不同的主机上。因此,您需要从不同机器生成的所有id都是唯一的,即从一台机器生成的id在其他机器上不应相同是的,请原谅我的英语不好,您是对的@dbwyes,数据库当然可以这样做。但我想知道如何在java范围内再运行一个java应用程序(服务),该应用程序(服务)仅用于id生成目的,可通过例如RMI访问