Refactor(user): 引入分布式ID生成服务替代Redis自增ID

- 添加对 han-note-distributed-id-generator-api 模块的依赖
- 实现 DistributedIdGeneratorRpcService 调用远程ID生成服务
- 替换用户注册时使用的Redis自增ID为RPC方式获取
- 删除原有从数据库获取用户ID的逻辑
- 更新pom.xml引入新的API依赖并管理版本
This commit is contained in:
Hanserwei
2025-10-07 15:23:22 +08:00
parent 2910fdb54f
commit eb74ebae8d
6 changed files with 87 additions and 5 deletions

View File

@@ -0,0 +1,19 @@
package com.hanserwei.hannote.distributed.id.generator.api;
import com.hanserwei.hannote.distributed.id.generator.constant.ApiConstants;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(name = ApiConstants.SERVICE_NAME)
public interface DistributedIdGeneratorFeignApi {
String PREFIX = "/id";
@GetMapping(value = PREFIX + "/segment/get/{key}")
String getSegmentId(@PathVariable("key") String key);
@GetMapping(value = PREFIX + "/snowflake/get/{key}")
String getSnowflakeId(@PathVariable("key") String key);
}

View File

@@ -0,0 +1,9 @@
package com.hanserwei.hannote.distributed.id.generator.constant;
public interface ApiConstants {
/**
* 服务名称
*/
String SERVICE_NAME = "han-note-distributed-id-generator";
}

View File

@@ -84,6 +84,10 @@
<groupId>com.hanserwei</groupId> <groupId>com.hanserwei</groupId>
<artifactId>han-note-user-api</artifactId> <artifactId>han-note-user-api</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.hanserwei</groupId>
<artifactId>han-note-distributed-id-generator-api</artifactId>
</dependency>
</dependencies> </dependencies>

View File

@@ -0,0 +1,40 @@
package com.hanserwei.hannote.user.biz.rpc;
import com.hanserwei.hannote.distributed.id.generator.api.DistributedIdGeneratorFeignApi;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@Component
public class DistributedIdGeneratorRpcService {
@Resource
private DistributedIdGeneratorFeignApi distributedIdGeneratorFeignApi;
/**
* Leaf 号段模式:小憨书 ID 业务标识
*/
private static final String BIZ_TAG_HANNOTE_ID = "leaf-segment-hannote-id";
/**
* Leaf 号段模式:用户 ID 业务标识
*/
private static final String BIZ_TAG_USER_ID = "leaf-segment-user-id";
/**
* 调用分布式 ID 生成服务生成小憨书 ID
*
* @return 小憨书 ID
*/
public String getHannoteId() {
return distributedIdGeneratorFeignApi.getSegmentId(BIZ_TAG_HANNOTE_ID);
}
/**
* 调用分布式 ID 生成服务用户 ID
*
* @return 用户 ID
*/
public String getUserId() {
return distributedIdGeneratorFeignApi.getSegmentId(BIZ_TAG_USER_ID);
}
}

View File

@@ -21,6 +21,7 @@ import com.hanserwei.hannote.user.biz.domain.mapper.UserRoleDOMapper;
import com.hanserwei.hannote.user.biz.enums.ResponseCodeEnum; import com.hanserwei.hannote.user.biz.enums.ResponseCodeEnum;
import com.hanserwei.hannote.user.biz.enums.SexEnum; import com.hanserwei.hannote.user.biz.enums.SexEnum;
import com.hanserwei.hannote.user.biz.model.vo.UpdateUserInfoReqVO; import com.hanserwei.hannote.user.biz.model.vo.UpdateUserInfoReqVO;
import com.hanserwei.hannote.user.biz.rpc.DistributedIdGeneratorRpcService;
import com.hanserwei.hannote.user.biz.rpc.OssRpcService; import com.hanserwei.hannote.user.biz.rpc.OssRpcService;
import com.hanserwei.hannote.user.biz.service.UserService; import com.hanserwei.hannote.user.biz.service.UserService;
import com.hanserwei.hannote.user.dto.req.FindUserByEmailReqDTO; import com.hanserwei.hannote.user.dto.req.FindUserByEmailReqDTO;
@@ -53,6 +54,8 @@ public class UserServiceImpl extends ServiceImpl<UserDOMapper, UserDO> implement
private RoleDOMapper roleDOMapper; private RoleDOMapper roleDOMapper;
@Resource @Resource
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;
@Resource
private DistributedIdGeneratorRpcService distributedIdGeneratorRpcService;
@Override @Override
public Response<?> updateUserInfo(UpdateUserInfoReqVO updateUserInfoReqVO) { public Response<?> updateUserInfo(UpdateUserInfoReqVO updateUserInfoReqVO) {
@@ -155,10 +158,14 @@ public class UserServiceImpl extends ServiceImpl<UserDOMapper, UserDO> implement
} }
// 否则注册新用户 // 否则注册新用户
// 获取全局自增的小憨书 ID // RPC获取全局自增的小憨书 ID
Long hanNoteId = redisTemplate.opsForValue().increment(RedisKeyConstants.HAN_NOTE_ID_GENERATOR_KEY); String hanNoteId = distributedIdGeneratorRpcService.getHannoteId();
// RPC调用获取用户ID
String userIdStr = distributedIdGeneratorRpcService.getUserId();
Long userId = Long.valueOf(userIdStr);
UserDO userDO = UserDO.builder() UserDO userDO = UserDO.builder()
.id(userId)
.email(email) .email(email)
.hanNoteId(String.valueOf(hanNoteId)) // 自动生成小憨书号 ID .hanNoteId(String.valueOf(hanNoteId)) // 自动生成小憨书号 ID
.nickname("小憨憨" + hanNoteId) // 自动生成昵称, 如小憨憨10000 .nickname("小憨憨" + hanNoteId) // 自动生成昵称, 如小憨憨10000
@@ -171,9 +178,6 @@ public class UserServiceImpl extends ServiceImpl<UserDOMapper, UserDO> implement
// 添加入库 // 添加入库
this.save(userDO); this.save(userDO);
// 获取刚刚添加入库的用户 ID
Long userId = userDO.getId();
// 给该用户分配一个默认角色 // 给该用户分配一个默认角色
UserRoleDO userRoleDO = UserRoleDO.builder() UserRoleDO userRoleDO = UserRoleDO.builder()
.userId(userId) .userId(userId)

View File

@@ -227,6 +227,12 @@
<artifactId>han-note-kv-api</artifactId> <artifactId>han-note-kv-api</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<dependency>
<groupId>com.hanserwei</groupId>
<artifactId>han-note-distributed-id-generator-api</artifactId>
<version>${revision}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>