
# 1 简介
分布式ID服务提供生成环境内全局唯一ID。通过分布式ID服务生成的ID具有如下特性:
**1. 全局唯一**
在一个cluster内产生的id是唯一的。
**2. 趋势有序**
不能确保在极短的时间(取决于微服务节点之间的时间差)内生成的多个id是严格有序的,因此不能作为数据行生成的排序依据。ID值含有当前服务节点的时间值,一个服务节点产生的id是严格有序,多个服务节点之间的时间可能存在误差,因此无法保证严格有序,但趋势有序。
**3. 高性能**
服务本节点内生成ID,仅在启动服务的时候,需要通过网络获取种子(workerId)。
**4. 高可靠**
1.避免单点故障:ID服务由多个group组成,group内含多个worker。
2.容错与复用:含时钟回拨容错机制,可复用异常宕机服务节点的workerId。
# 2 应用场景
在复杂的分布式系统中,往往需要对大量的数据和消息进行唯一标识。在如下场景中比较常用:
> **分布式环境数据库表主键生成。**
# 3 接口说明
分布式ID相关接口定义和实现存在于bos-id-1.0.jar中。对于使用者来说只需要调用kd.bos.id.ID接口中的方法即可。
## 3.1 接口列表
| 方法 | 说明 |
| - | - |
| genLongId | 生成一个long类型的ID |
| genLongIds | 生成指定数量的long类型ID |
| genStringId | 生成一个String类型的ID |
| genStringIds | 生成指定数量的String类型ID |
| toStringId | 将long类型ID转成String类型ID |
| toLongId | 将String类型ID转成long类型ID |
| getCreateTime | 获取ID的创建时间 |
## 3.2 接口详情
### genLongId
+ **功能描述**
生成一个long类型的ID。
+ **方法**
```java
static long genLongId()
```
+ **参数说明**
无
+ **返回值**
返回一个long类型的ID
+ **示例代码**
```java
long id = ID.genLongId();
```
### genLongIds
+ **功能描述**
生成指定数量的long类型ID。
+ **方法**
```java
static long[] genLongIds(int count)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| count | int | 生成ID的数量 |
+ **返回值**
返回一个long类型的ID数组。
+ **示例代码**
```java
long[] ids = ID.genLongIds(10);
```
### genStringId
+ **功能描述**
生成一个String类型的ID。
+ **方法**
```java
static String genStringId()
```
+ **参数说明**
无
+ **返回值**
返回一个String类型的ID。
+ **示例代码**
```java
String id = ID.genStringId();
```
### genStringIds
+ **功能描述**
生成指定数量的String类型ID。
+ **方法**
```java
static String[] genStringIds(int count)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| count | int | 生成ID的数量 |
+ **返回值**
返回一个String类型的ID数组。
+ **示例代码**
```java
String[] ids = ID.genStringIds(10);
```
### toStringId
+ **功能描述**
将long类型ID转成String类型ID。
+ **方法**
```java
static String toStringId(long id)
```
+ **参数说明**
| 参数 | 类型 | 说明 |
| - | - | - |
| count | long | id |
+ **返回值**
返回long类型ID转换后的String类型ID。
+ **示例代码**
```java
String stringId = ID.toStringId(698290515157716992L);
```
### toLongId
+ **功能描述**
将Sting类型ID转成long类型ID。
+ **方法**
```java
static long toLongId(String id)
```
+ **参数说