feat(comment): 新增评论热度计算与更新功能
- 在评论数据对象中新增 childCommentTotal 和 heat 字段 - 扩展 CommentDOMapper 支持批量更新评论热度值 - 新增 CommentHeatBO 类用于封装评论热度信息 - 实现基于点赞数和回复数的热度值计算工具类 HeatCalculator - 添加 RocketMQ 消费者异步处理评论热度更新消息 - 引入 buffer-trigger依赖实现消息聚合发送 - 扩展 JsonUtils 工具类支持 Set 类型反序列化 - 新增 MQ 常量 TOPIC_COMMENT_HEAT_UPDATE用于热度更新主题 - 修改 SQL 脚本增加 heat 字段并设置默认值- 更新测试接口请求参数内容以适配新逻辑
This commit is contained in:
@@ -7,6 +7,11 @@ public interface MQConstants {
|
||||
*/
|
||||
String TOPIC_COUNT_NOTE_COMMENT = "CountNoteCommentTopic";
|
||||
|
||||
/**
|
||||
* Topic: 评论热度值更新
|
||||
*/
|
||||
String TOPIC_COMMENT_HEAT_UPDATE = "CommentHeatUpdateTopic";
|
||||
|
||||
/**
|
||||
* Topic: 计数 - 笔记点赞数
|
||||
*/
|
||||
|
||||
@@ -10,14 +10,20 @@ import com.hanserwei.hannote.count.biz.enums.CommentLevelEnum;
|
||||
import com.hanserwei.hannote.count.biz.model.dto.CountPublishCommentMqDTO;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.client.producer.SendCallback;
|
||||
import org.apache.rocketmq.client.producer.SendResult;
|
||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.support.MessageBuilder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@@ -27,6 +33,9 @@ import java.util.stream.Collectors;
|
||||
@Slf4j
|
||||
public class CountNoteChildCommentConsumer implements RocketMQListener<String> {
|
||||
|
||||
@Resource
|
||||
private RocketMQTemplate rocketMQTemplate;
|
||||
|
||||
@Resource
|
||||
private CommentDOMapper commentDOMapper;
|
||||
|
||||
@@ -76,5 +85,24 @@ public class CountNoteChildCommentConsumer implements RocketMQListener<String> {
|
||||
// 更新一级评论的下级评论总数,进行累加操作
|
||||
commentDOMapper.updateChildCommentTotal(parentId, count);
|
||||
}
|
||||
|
||||
// 获取字典中所用的评论ID
|
||||
Set<Long> commentIds = groupMap.keySet();
|
||||
|
||||
// 异步发送MQ消息计数,更新评论热度值
|
||||
Message<String> message = MessageBuilder.withPayload(JsonUtils.toJsonString(commentIds))
|
||||
.build();
|
||||
// 异步发送 MQ 消息
|
||||
rocketMQTemplate.asyncSend(MQConstants.TOPIC_COMMENT_HEAT_UPDATE, message, new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info("==> 【评论热度值更新】MQ 发送成功,SendResult: {}", sendResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable throwable) {
|
||||
log.error("==> 【评论热度值更新】MQ 发送异常: ", throwable);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user