Skip to content

集成Java客户端

钟勋 edited this page Mar 24, 2022 · 15 revisions

简介

客户端用于协助应用获取id,需要Java8及以上。

提供两种集成方式:

  • 直接集成客户端(非spring-boot应用)
  • 通过Starter集成客户端(spring-boot应用)

1 直接集成客户端

客户端提供最核心也是最原子的能力。

1.1 引入客户端依赖

<dependency>
    <groupId>org.antframework.idcenter</groupId>
    <artifactId>idcenter-client</artifactId>
    <version>1.6.0</version>
</dependency>

1.2 使用客户端

客户端就是Java类,直接new就可以,只是需要传给它相应参数。一个应用可以创建多个客户端,每个客户端之间互不影响。

// 创建客户端
IderContext idersContext = new IderContext(
        "http://47.108.55.170:6210", // 服务端地址(地址格式为http://{IP}:6210,这里使用演示环境的服务端地址,可以直接运行)
        10 * 60 * 1000,              // 最短时长储备量(毫秒,服务端不可用时客户端能够维持的最短时间)
        15 * 60 * 1000,              // 最长时长储备量(毫秒,服务端不可用时客户端能够维持的最长时间)
        null,                        // 获取id时最多被阻塞的线程数量(null表示不限制数量)
        5);                          // 客户端请求服务端的线程数量(一般5个线程足已)
// “最长时长储备量”减去“最短时长储备量”的差值就是客户端请求服务端的平均间隔时间,

// 获取用户id的提供者
Ider ider = idersContext.getIder("userId");
// 获取id
Id id1 = ider.acquireId();
Id id2 = ider.acquireId();
// 以上获取到的是最原始的id形式,使用方可以根据需要将id格式化为自己需要的格式
// 1、如果你创建的id的周期类型是“无周期”,则直接获取id即可,比如得到:1
long formattedId1=id1.getId();
// 2、如果你创建的id的周期类型是“每天”,则对id进行格式化,比如得到:2021070300001
String formattedIdStr1 = id1.getPeriod().toString() + String.format("%05d", id1.getId());

2 通过Starter集成客户端

Starter本质上还是依赖于上面介绍的客户端的能力,只不过根据spring-boot场景提供了更优雅的集成方式。

注意:本Starter既支持SpringBoot v2.x,也支持SpringBoot v1.x

2.1 引入starter依赖

  • SpringBoot v2.x应用引入:
<dependency>
    <groupId>org.antframework.idcenter</groupId>
    <artifactId>idcenter-spring-boot-starter</artifactId>
    <version>1.6.0</version>
</dependency>
  • SpringBoot v1.x应用引入:
<dependency>
    <groupId>org.antframework.idcenter</groupId>
    <artifactId>idcenter-spring-boot-starter</artifactId>
    <version>1.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.3.6.Final</version>
</dependency>

2.2 配置客户端

在应用的配置文件application.properties或application-xxx.properties中配置:

# 必填:idcenter服务端地址(地址格式为http://{IP}:6210,这里使用演示环境的服务端地址,可以直接运行)
idcenter.server-url=http://47.108.55.170:6210

# 选填:最短时长储备量(单位:毫秒。默认为10分钟)
idcenter.min-reserve=600000
# 选填:最长时长储备量(单位:毫秒。默认为15分钟)
idcenter.max-reserve=900000
# 选填:最多被阻塞的线程数量(默认为不限制数量)
idcenter.max-blocked-threads=10
# 选填:请求服务端的线程数量(默认为5)
idcenter.request-server-threads=5

# “最短时长储备量”含义:服务端不可用时客户端能够维持的最短时间
# “最长时长储备量”含义:服务端不可用时客户端能够维持的最长时间
# “最长时长储备量”减去“最短时长储备量”的差值就是客户端请求服务端的平均间隔时间,

2.3 获取id

// 获取用户id的提供者
Ider ider = IderContexts.getIder("userId");
// 获取id
Id id1 = ider.acquireId();
Id id2 = ider.acquireId();
// 以上获取到的是最原始的id形式,使用方可以根据需要将id格式化为自己需要的格式
// 1、如果你创建的id的周期类型是“无周期”,则直接获取id即可,比如得到:1
long formattedId1=id1.getId();
// 2、如果你创建的id的周期类型是“每天”,则对id进行格式化,比如得到:2021070300001
String formattedIdStr1 = id1.getPeriod().toString() + String.format("%05d", id1.getId());