From eb74ebae8db42abd77335ab58f723c7eb6645b0b Mon Sep 17 00:00:00 2001 From: Hanserwei Date: Tue, 7 Oct 2025 15:23:22 +0800 Subject: [PATCH] =?UTF-8?q?Refactor(user):=20=E5=BC=95=E5=85=A5=E5=88=86?= =?UTF-8?q?=E5=B8=83=E5=BC=8FID=E7=94=9F=E6=88=90=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3Redis=E8=87=AA=E5=A2=9EID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加对 han-note-distributed-id-generator-api 模块的依赖 - 实现 DistributedIdGeneratorRpcService 调用远程ID生成服务 - 替换用户注册时使用的Redis自增ID为RPC方式获取 - 删除原有从数据库获取用户ID的逻辑 - 更新pom.xml引入新的API依赖并管理版本 --- .../api/DistributedIdGeneratorFeignApi.java | 19 +++++++++ .../id/generator/constant/ApiConstants.java | 9 +++++ han-note-user/han-note-user-biz/pom.xml | 4 ++ .../rpc/DistributedIdGeneratorRpcService.java | 40 +++++++++++++++++++ .../biz/service/impl/UserServiceImpl.java | 14 ++++--- pom.xml | 6 +++ 6 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/api/DistributedIdGeneratorFeignApi.java create mode 100644 han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/constant/ApiConstants.java create mode 100644 han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/rpc/DistributedIdGeneratorRpcService.java diff --git a/han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/api/DistributedIdGeneratorFeignApi.java b/han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/api/DistributedIdGeneratorFeignApi.java new file mode 100644 index 0000000..22f9ab5 --- /dev/null +++ b/han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/api/DistributedIdGeneratorFeignApi.java @@ -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); + +} \ No newline at end of file diff --git a/han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/constant/ApiConstants.java b/han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/constant/ApiConstants.java new file mode 100644 index 0000000..765f736 --- /dev/null +++ b/han-note-distributed-id-generator/han-note-distributed-id-generator-api/src/main/java/com/hanserwei/hannote/distributed/id/generator/constant/ApiConstants.java @@ -0,0 +1,9 @@ +package com.hanserwei.hannote.distributed.id.generator.constant; + +public interface ApiConstants { + + /** + * 服务名称 + */ + String SERVICE_NAME = "han-note-distributed-id-generator"; +} \ No newline at end of file diff --git a/han-note-user/han-note-user-biz/pom.xml b/han-note-user/han-note-user-biz/pom.xml index dd75d46..43d5042 100644 --- a/han-note-user/han-note-user-biz/pom.xml +++ b/han-note-user/han-note-user-biz/pom.xml @@ -84,6 +84,10 @@ com.hanserwei han-note-user-api + + com.hanserwei + han-note-distributed-id-generator-api + diff --git a/han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/rpc/DistributedIdGeneratorRpcService.java b/han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/rpc/DistributedIdGeneratorRpcService.java new file mode 100644 index 0000000..7d3b3a8 --- /dev/null +++ b/han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/rpc/DistributedIdGeneratorRpcService.java @@ -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); + } +} \ No newline at end of file diff --git a/han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/service/impl/UserServiceImpl.java b/han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/service/impl/UserServiceImpl.java index 066c62f..b0ea4d9 100644 --- a/han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/service/impl/UserServiceImpl.java +++ b/han-note-user/han-note-user-biz/src/main/java/com/hanserwei/hannote/user/biz/service/impl/UserServiceImpl.java @@ -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.SexEnum; 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.service.UserService; import com.hanserwei.hannote.user.dto.req.FindUserByEmailReqDTO; @@ -53,6 +54,8 @@ public class UserServiceImpl extends ServiceImpl implement private RoleDOMapper roleDOMapper; @Resource private RedisTemplate redisTemplate; + @Resource + private DistributedIdGeneratorRpcService distributedIdGeneratorRpcService; @Override public Response updateUserInfo(UpdateUserInfoReqVO updateUserInfoReqVO) { @@ -155,10 +158,14 @@ public class UserServiceImpl extends ServiceImpl implement } // 否则注册新用户 - // 获取全局自增的小憨书 ID - Long hanNoteId = redisTemplate.opsForValue().increment(RedisKeyConstants.HAN_NOTE_ID_GENERATOR_KEY); + // RPC获取全局自增的小憨书 ID + String hanNoteId = distributedIdGeneratorRpcService.getHannoteId(); + // RPC调用获取用户ID + String userIdStr = distributedIdGeneratorRpcService.getUserId(); + Long userId = Long.valueOf(userIdStr); UserDO userDO = UserDO.builder() + .id(userId) .email(email) .hanNoteId(String.valueOf(hanNoteId)) // 自动生成小憨书号 ID .nickname("小憨憨" + hanNoteId) // 自动生成昵称, 如:小憨憨10000 @@ -171,9 +178,6 @@ public class UserServiceImpl extends ServiceImpl implement // 添加入库 this.save(userDO); - // 获取刚刚添加入库的用户 ID - Long userId = userDO.getId(); - // 给该用户分配一个默认角色 UserRoleDO userRoleDO = UserRoleDO.builder() .userId(userId) diff --git a/pom.xml b/pom.xml index 0883301..16d94b8 100755 --- a/pom.xml +++ b/pom.xml @@ -227,6 +227,12 @@ han-note-kv-api ${revision} + + com.hanserwei + han-note-distributed-id-generator-api + ${revision} + +