2013-06-12 3 views
2

메시징 시스템 (JMS 또는 AMQP는 선택 사항)을 통해 메시지를 보내야하는 jboss Java EE 응용 프로그램을 개발 중입니다. 대략 초당 약 10k에서 15k 개의 메시지가있을 것입니다. 요구 사항은 응용 프로그램이 다시 시작된 후에도 (예 : 응용 프로그램 사용 1 일부터 해제 될 때까지 ID가 다시 반복되어서는 안 됨)응용 프로그램 수명 동안 고유 한 ID

내가

  1. 숫자 값만을 기반으로 솔루션을 선호하는 것 (어떤 데이터 유형?)
  2. 문자열

아이디의 자동 생성 원자되어야한다.

답변

6

자바 이들이 동일한 ID로 메시지를 생성하는 확률은 무시해도 좋은 이유는 위키 설명을 갖는다 UUID class

Universally Unique Identifiers를 생성하는 방법을 제공한다.

3

나는 특히 UUID가 다른 소스에서 쉽게 만들 수 있기 때문에 UUID를 좋아하는 경향이 있습니다. 그러나 long (64 비트) 정수를 사용할 수도 있습니다. 초당 15k 메시지에서 약 3 천 9 백만 년의 고유 숫자를 얻을 수 있습니다 (절반 이상으로하려면 0보다 작음).

+0

일반 '긴'은 시퀀스이어야하며 응용 프로그램이 다시 시작될 때까지 지속되어야합니다. 따라서 문제는 초당 15k 번 저장 장치에 안전하게 쓰거나 다른 방법으로이를 최적화하는 방향으로 바뀝니다. 데이터베이스가 시퀀스의 갭을 허용하고 ID의 "블록"을 소비함으로써 데이터베이스가이를 수행한다고 생각합니다. (병렬 처리없이 여러 번 AtomicLong을 증가시키는 것뿐만 아니라) – millimoose

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

하거나 직접 실행합니다.