feat(count): 实现粉丝与关注计数服务

- 新增粉丝数与关注数的 MQ 消费逻辑
- 实现 Redis 计数更新与数据库落库操作
- 添加流量削峰限流机制提升系统稳定性
- 完善计数 DTO 与枚举类型定义
- 扩展 JsonUtils 工具类支持 Map 转换
- 更新 MQ 常量与 Redis Key 管理策略
-优化 MyBatis Mapper 支持计数插入或更新操作,Mybatis-plus操作起来属于硬编码,所以使用MyBatis的XML形式
This commit is contained in:
2025-10-16 19:21:28 +08:00
parent c6ac7193c1
commit d59acad051
12 changed files with 422 additions and 7 deletions

View File

@@ -137,7 +137,7 @@ class MQTests {
// 构建消息体 DTO
CountFollowUnfollowMqDTO countFollowUnfollowMqDTO = CountFollowUnfollowMqDTO.builder()
.userId(i + 1) // 关注者用户 ID
.targetUserId(27L) // 目标用户
.targetUserId(100L) // 目标用户
.type(FollowUnfollowTypeEnum.FOLLOW.getCode())
.build();
@@ -146,15 +146,28 @@ class MQTests {
.build();
// 发送 MQ 通知计数服务:统计粉丝数
rocketMQTemplate.asyncSend(MQConstants.TOPIC_COUNT_FANS, message, new SendCallback() {
// rocketMQTemplate.asyncSend(MQConstants.TOPIC_COUNT_FANS, message, new SendCallback() {
// @Override
// public void onSuccess(SendResult sendResult) {
// log.info("==> 【计数服务粉丝数】MQ 发送成功SendResult: {}", sendResult);
// }
//
// @Override
// public void onException(Throwable throwable) {
// log.error("==> 【计数服务粉丝数】MQ 发送异常: ", throwable);
// }
// });
// 发送 MQ 通知计数服务:统计关注数
rocketMQTemplate.asyncSend(MQConstants.TOPIC_COUNT_FOLLOWING, message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
log.info("==> 【计数服务:粉丝数】MQ 发送成功SendResult: {}", sendResult);
log.info("==> 【计数服务:关注数】MQ 发送成功SendResult: {}", sendResult);
}
@Override
public void onException(Throwable throwable) {
log.error("==> 【计数服务:粉丝数】MQ 发送异常: ", throwable);
log.error("==> 【计数服务:关注数】MQ 发送异常: ", throwable);
}
});
}