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} + +