-1

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

  1. 0x-111-111-PX-2013-11-11-00001

  2. 0x-111-111-PX-2013-11-11-00002

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

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

4

2 回答 2

2

生成随机数或随机字符串 (UUID) 始终是一项挑战。即便是平时java.util.Random也不完美。您已经排除了使用可以确保跨 JVM 的随机性的数据库。

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

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

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

  1. 0x-111-111-PX-2013-11-11-00001-M1
  2. 0x-111-111-PX-2013-11-11-00001-M2

您可以将 M1/M2 放在字符串中的任何位置。

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

于 2013-11-15T06:59:27.600 回答
1

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

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

3) 其他 java 应用程序将使用相同算法更新的共享文件

于 2013-11-15T06:21:25.753 回答