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:
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.hanserwei.hannote.distributed.id.generator.constant;
|
||||||
|
|
||||||
|
public interface ApiConstants {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
String SERVICE_NAME = "han-note-distributed-id-generator";
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
6
pom.xml
6
pom.xml
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user