feat(count): 实现笔记发布与删除的计数更新功能
- 新增笔记操作 MQ 消费者 CountNotePublishConsumer - 支持处理笔记发布和删除消息,更新 Redis 和数据库计数 - 新增笔记操作相关常量:TOPIC_NOTE_OPERATE、TAG_NOTE_PUBLISH、TAG_NOTE_DELETE - 定义笔记操作 DTO:NoteOperateMqDTO,用于 MQ 消息传递 - 在笔记服务中发送笔记发布和删除的 MQ 消息 - 新增 Redis Hash 字段 noteTotal 用于存储笔记总数 - 新增数据库操作 insertOrUpdateNoteTotalByUserId 用于更新笔记总数
This commit is contained in:
@@ -32,6 +32,21 @@ public interface MQConstants {
|
||||
*/
|
||||
String TOPIC_COUNT_NOTE_COLLECT = "CountNoteCollectTopic";
|
||||
|
||||
/**
|
||||
* Topic: 笔记操作(发布、删除)
|
||||
*/
|
||||
String TOPIC_NOTE_OPERATE = "NoteOperateTopic";
|
||||
|
||||
/**
|
||||
* Tag 标签:笔记发布
|
||||
*/
|
||||
String TAG_NOTE_PUBLISH = "publishNote";
|
||||
|
||||
/**
|
||||
* Tag 标签:笔记删除
|
||||
*/
|
||||
String TAG_NOTE_DELETE = "deleteNote";
|
||||
|
||||
/**
|
||||
* 点赞标签
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.hanserwei.hannote.note.biz.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum NoteOperateEnum {
|
||||
// 笔记发布
|
||||
PUBLISH(1),
|
||||
// 笔记删除
|
||||
DELETE(0),
|
||||
;
|
||||
|
||||
private final Integer code;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.hanserwei.hannote.note.biz.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class NoteOperateMqDTO {
|
||||
|
||||
/**
|
||||
* 笔记发布者 ID
|
||||
*/
|
||||
private Long creatorId;
|
||||
|
||||
/**
|
||||
* 笔记 ID
|
||||
*/
|
||||
private Long noteId;
|
||||
|
||||
/**
|
||||
* 操作类型: 0 - 笔记删除; 1:笔记发布;
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
}
|
||||
@@ -24,6 +24,7 @@ import com.hanserwei.hannote.note.biz.domain.mapper.NoteDOMapper;
|
||||
import com.hanserwei.hannote.note.biz.enums.*;
|
||||
import com.hanserwei.hannote.note.biz.model.dto.CollectUnCollectNoteMqDTO;
|
||||
import com.hanserwei.hannote.note.biz.model.dto.LikeUnlikeNoteMqDTO;
|
||||
import com.hanserwei.hannote.note.biz.model.dto.NoteOperateMqDTO;
|
||||
import com.hanserwei.hannote.note.biz.model.vo.*;
|
||||
import com.hanserwei.hannote.note.biz.rpc.DistributedIdGeneratorRpcService;
|
||||
import com.hanserwei.hannote.note.biz.rpc.KeyValueRpcService;
|
||||
@@ -40,7 +41,6 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.rocketmq.client.producer.SendCallback;
|
||||
import org.apache.rocketmq.client.producer.SendResult;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.script.DefaultRedisScript;
|
||||
@@ -88,7 +88,7 @@ public class NoteServiceImpl extends ServiceImpl<NoteDOMapper, NoteDO> implement
|
||||
.build();
|
||||
@Resource
|
||||
private NoteLikeDOService noteLikeDOService;
|
||||
@Autowired
|
||||
@Resource
|
||||
private NoteCollectionDOService noteCollectionDOService;
|
||||
|
||||
@Override
|
||||
@@ -190,6 +190,33 @@ public class NoteServiceImpl extends ServiceImpl<NoteDOMapper, NoteDO> implement
|
||||
}
|
||||
}
|
||||
}
|
||||
// 发送 MQ
|
||||
// 构建消息体 DTO
|
||||
NoteOperateMqDTO noteOperateMqDTO = NoteOperateMqDTO.builder()
|
||||
.creatorId(creatorId)
|
||||
.noteId(Long.valueOf(snowflakeId))
|
||||
.type(NoteOperateEnum.PUBLISH.getCode()) // 发布笔记
|
||||
.build();
|
||||
|
||||
// 构建消息对象,并将 DTO 转成 Json 字符串设置到消息体中
|
||||
Message<String> message = MessageBuilder.withPayload(JsonUtils.toJsonString(noteOperateMqDTO))
|
||||
.build();
|
||||
|
||||
// 通过冒号连接, 可让 MQ 发送给主题 Topic 时,携带上标签 Tag
|
||||
String destination = MQConstants.TOPIC_NOTE_OPERATE + ":" + MQConstants.TAG_NOTE_PUBLISH;
|
||||
|
||||
// 异步发送 MQ 消息,提升接口响应速度
|
||||
rocketMQTemplate.asyncSend(destination, message, new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info("==> 【笔记发布】MQ 发送成功,SendResult: {}", sendResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable throwable) {
|
||||
log.error("==> 【笔记发布】MQ 发送异常: ", throwable);
|
||||
}
|
||||
});
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@@ -498,6 +525,34 @@ public class NoteServiceImpl extends ServiceImpl<NoteDOMapper, NoteDO> implement
|
||||
rocketMQTemplate.syncSend(MQConstants.TOPIC_DELETE_NOTE_LOCAL_CACHE, noteId);
|
||||
log.info("====> MQ:删除笔记,删除本地缓存发送成功...");
|
||||
|
||||
// 发送 MQ
|
||||
// 构建消息体 DTO
|
||||
NoteOperateMqDTO noteOperateMqDTO = NoteOperateMqDTO.builder()
|
||||
.creatorId(selectNoteDO.getCreatorId())
|
||||
.noteId(noteId)
|
||||
.type(NoteOperateEnum.DELETE.getCode()) // 删除笔记
|
||||
.build();
|
||||
|
||||
// 构建消息对象,并将 DTO 转成 Json 字符串设置到消息体中
|
||||
Message<String> message = MessageBuilder.withPayload(JsonUtils.toJsonString(noteOperateMqDTO))
|
||||
.build();
|
||||
|
||||
// 通过冒号连接, 可让 MQ 发送给主题 Topic 时,携带上标签 Tag
|
||||
String destination = MQConstants.TOPIC_NOTE_OPERATE + ":" + MQConstants.TAG_NOTE_DELETE;
|
||||
|
||||
// 异步发送 MQ 消息,提升接口响应速度
|
||||
rocketMQTemplate.asyncSend(destination, message, new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info("==> 【笔记删除】MQ 发送成功,SendResult: {}", sendResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable throwable) {
|
||||
log.error("==> 【笔记删除】MQ 发送异常: ", throwable);
|
||||
}
|
||||
});
|
||||
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user