From b3b6c28815d00a7c56705bc256cade5a47c271ef Mon Sep 17 00:00:00 2001 From: wangkang Date: Wed, 6 Sep 2017 10:45:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java | 1 + udf-starter-id/src/main/java/org/itkk/udf/id/domain/Id.java | 6 ++++++ .../src/main/test/java/org/itkk/udf/id/IdWorkerTest.java | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java index 4c46fdf..ab603ef 100644 --- a/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorker.java @@ -115,6 +115,7 @@ public class IdWorker { public Id reverse(long id) { Id reverseId = new Id(); reverseId.setSequence((id) & ~(-1L << sequenceBits)); + reverseId.setDwId((id >> (workerIdShift)) & ~(-1L << (datacenterIdBits + workerIdBits))); reverseId.setWorkerId((id >> workerIdShift) & ~(-1L << workerIdBits)); reverseId.setDatacenterId((id >> datacenterIdShift) & ~(-1L << datacenterIdBits)); reverseId.setTimestamp((id >> timestampLeftShift) + twepoch); diff --git a/udf-starter-id/src/main/java/org/itkk/udf/id/domain/Id.java b/udf-starter-id/src/main/java/org/itkk/udf/id/domain/Id.java index d51b076..4b38ae4 100644 --- a/udf-starter-id/src/main/java/org/itkk/udf/id/domain/Id.java +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/domain/Id.java @@ -29,6 +29,12 @@ public class Id implements Serializable { @ApiModelProperty(value = "数据中心ID( 0 - 31 )", required = true, dataType = "long") private long datacenterId; + /** + * 数据中心ID | 机器ID ( 0 - 1023 ) + */ + @ApiModelProperty(value = "数据中心ID | 机器ID ( 0 - 4095 )", required = true, dataType = "long") + private long dwId; + /** * 时间戳 */ diff --git a/udf-starter-id/src/main/test/java/org/itkk/udf/id/IdWorkerTest.java b/udf-starter-id/src/main/test/java/org/itkk/udf/id/IdWorkerTest.java index 07938bb..a0b5fe2 100644 --- a/udf-starter-id/src/main/test/java/org/itkk/udf/id/IdWorkerTest.java +++ b/udf-starter-id/src/main/test/java/org/itkk/udf/id/IdWorkerTest.java @@ -15,7 +15,7 @@ public class IdWorkerTest { public void id() { Map map = new HashMap<>(); int maxCount = 1; - IdWorker idWorker = new IdWorker(10, 20); + IdWorker idWorker = new IdWorker(1, 1); for (int i = 0; i < maxCount; i++) { long id = idWorker.nextId(); log.info("--------------------------------------------------------------"); @@ -30,6 +30,7 @@ public class IdWorkerTest { log.info(Long.toBinaryString((id >> 17)) + " ---> id ,左移17位,定位到datacenterId"); log.info(Long.toBinaryString((id >> 22)) + " ---> id ,左移22位,定位到timestamp"); log.info(Long.parseLong(Long.toBinaryString((id) & ~(-1L << 12L)), 2) + " ---> & 运算 , 解析sequence"); + log.info(Long.parseLong(Long.toBinaryString((id >> 12) & ~(-1L << 10L)), 2) + " ---> & 运算 , 解析dwId"); log.info(Long.parseLong(Long.toBinaryString((id >> 12) & ~(-1L << 5L)), 2) + " ---> & 运算 , 解析workerId"); log.info(Long.parseLong(Long.toBinaryString((id >> 17) & ~(-1L << 5L)), 2) + " ---> & 运算 , 解析datacenterId"); log.info(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date(Long.parseLong(Long.toBinaryString((id >> 22) + 1288834974657l), 2))) + " ---> & 运算 , 解析timestamp");