feat(count): 实现笔记点赞计数功能
- 新增笔记点赞计数 MQ DTO 类 - 实现笔记点赞计数消费者,支持流量削峰与批量聚合 - 实现笔记点赞计数落库消费者,带限流处理 - 新增笔记点赞类型枚举类 - 添加笔记点赞相关 MQ Topic 常量定义 - 扩展笔记计数 Mapper,支持点赞数更新 - 新增 Redis 笔记计数 Key 构建方法及字段常量 - 在笔记服务中发送点赞计数 MQ 消息
This commit is contained in:
@@ -11,10 +11,14 @@ import com.hanserwei.hannote.note.biz.model.dto.LikeUnlikeNoteMqDTO;
|
||||
import com.hanserwei.hannote.note.biz.service.NoteLikeDOService;
|
||||
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.common.message.Message;
|
||||
import org.apache.rocketmq.spring.annotation.ConsumeMode;
|
||||
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.support.MessageBuilder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@@ -36,6 +40,8 @@ public class LikeUnlikeNoteConsumer implements RocketMQListener<Message> {
|
||||
private NoteLikeDOMapper noteLikeDOMapper;
|
||||
@Resource
|
||||
private NoteLikeDOService noteLikeDOService;
|
||||
@Resource
|
||||
private RocketMQTemplate rocketMQTemplate;
|
||||
|
||||
@Override
|
||||
public void onMessage(Message message) {
|
||||
@@ -94,7 +100,25 @@ public class LikeUnlikeNoteConsumer implements RocketMQListener<Message> {
|
||||
// 执行更新
|
||||
boolean update = noteLikeDOService.update(updateEntity, wrapper);
|
||||
|
||||
// TODO: 删除计数
|
||||
if (!update) {
|
||||
return;
|
||||
}
|
||||
// 更新数据库成功后,发送计数 MQ
|
||||
org.springframework.messaging.Message<String> message = MessageBuilder.withPayload(bodyJsonStr)
|
||||
.build();
|
||||
|
||||
// 异步发送 MQ 消息
|
||||
rocketMQTemplate.asyncSend(MQConstants.TOPIC_COUNT_NOTE_LIKE, message, new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info("==> 【计数: 笔记取消点赞】MQ 发送成功,SendResult: {}", sendResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable throwable) {
|
||||
log.error("==> 【计数: 笔记取消点赞】MQ 发送异常: ", throwable);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -128,7 +152,27 @@ public class LikeUnlikeNoteConsumer implements RocketMQListener<Message> {
|
||||
// 添加或更新笔记点赞记录
|
||||
boolean count = noteLikeDOMapper.insertOrUpdate(noteLikeDO);
|
||||
|
||||
// TODO: 发送计数 MQ
|
||||
if (!count) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 发送计数 MQ
|
||||
// 更新数据库成功后,发送计数 MQ
|
||||
org.springframework.messaging.Message<String> message = MessageBuilder.withPayload(bodyJsonStr)
|
||||
.build();
|
||||
|
||||
// 异步发送 MQ 消息
|
||||
rocketMQTemplate.asyncSend(MQConstants.TOPIC_COUNT_NOTE_LIKE, message, new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info("==> 【计数: 笔记点赞】MQ 发送成功,SendResult: {}", sendResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable throwable) {
|
||||
log.error("==> 【计数: 笔记点赞】MQ 发送异常: ", throwable);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,11 @@ public interface MQConstants {
|
||||
*/
|
||||
String TOPIC_LIKE_OR_UNLIKE = "LikeUnlikeTopic";
|
||||
|
||||
/**
|
||||
* Topic: 计数 - 笔记点赞数
|
||||
*/
|
||||
String TOPIC_COUNT_NOTE_LIKE = "CountNoteLikeTopic";
|
||||
|
||||
/**
|
||||
* 点赞标签
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user