2

I am developing a jboss Java EE application where I need to send messages through a messaging system (JMS or AMQP optional). Approx. there will be around 10k to 15k messages per second. The requirement is to generate a unique id for each outgoing message that is not used any time in the past, even after application restart i.e. the id should not repeat again through the application lifetime (from day 1 of application use until decommissioned)

I will prefer solutions based on

  1. Numeric value only (what data type?)
  2. String

The auto-generation of the id should be atomic.

4

3 回答 3

6

Java 提供了一种在UUID 类中生成通用唯一标识符的方法

维基百科解释了为什么这些生成具有相同 ID 的消息的概率可以忽略不计。

于 2013-06-12T22:08:38.900 回答
3

我倾向于喜欢 UUID,尤其是因为您可以轻松地从不同的来源创建它们。但您也可以只使用一个长(64 位)整数。以每秒 15k 条消息的速度,您将获得大约 3900 万年的唯一数字(如果您希望它们大于零,则为一半)。

于 2013-06-12T22:14:44.053 回答
0

如果您正在寻找快速简单的方法,请查看:UIDGenerator.java

您可以自定义它(仅处理或世界唯一),它易于使用且快速:

    private static final UIDGenerator SCA_GEN = new UIDGenerator(new ScalableSequence(0, 100));
.......
    SCA_GEN.next();

在以下位置查看我的基准测试结果:

http://zoltran.com/roller/zoltran/entry/generating_a_unique_id

或自己运行它们。

于 2014-10-26T17:57:51.370 回答