@@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hanserwei.framework.biz.context.holder.LoginUserContextHolder ;
import com.hanserwei.framework.common.exception.ApiException ;
import com.hanserwei.framework.common.response.Response ;
import com.hanserwei.framework.common.utils.JsonUtils ;
import com.hanserwei.hannote.user.dto.resp.FindUserByIdRspDTO ;
import com.hanserwei.hannote.user.relation.biz.constant.MQConstants ;
import com.hanserwei.hannote.user.relation.biz.constant.RedisKeyConstants ;
import com.hanserwei.hannote.user.relation.biz.domain.dataobject.FollowingDO ;
import com.hanserwei.hannote.user.relation.biz.enums.LuaResultEnum ;
import com.hanserwei.hannote.user.relation.biz.enums.ResponseCodeEnum ;
import com.hanserwei.hannote.user.relation.biz.model.dto.FollowUserMqDTO ;
import com.hanserwei.hannote.user.relation.biz.model.vo.FollowUserReqVO ;
import com.hanserwei.hannote.user.relation.biz.rpc.UserRpcService ;
import com.hanserwei.hannote.user.relation.biz.service.FollowingDOService ;
@@ -18,9 +21,14 @@ import com.hanserwei.hannote.user.relation.biz.service.RelationService;
import com.hanserwei.hannote.user.relation.biz.util.DateUtils ;
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.core.RocketMQTemplate ;
import org.springframework.core.io.ClassPathResource ;
import org.springframework.data.redis.core.RedisTemplate ;
import org.springframework.data.redis.core.script.DefaultRedisScript ;
import org.springframework.messaging.Message ;
import org.springframework.messaging.support.MessageBuilder ;
import org.springframework.scripting.support.ResourceScriptSource ;
import org.springframework.stereotype.Service ;
@@ -39,6 +47,8 @@ public class RelationServiceImpl implements RelationService {
private RedisTemplate < Object , Object > redisTemplate ;
@Resource
private FollowingDOService followingDOService ;
@Resource
private RocketMQTemplate rocketMQTemplate ;
@Override
public Response < ? > follow ( FollowUserReqVO followUserReqVO ) {
@@ -118,7 +128,36 @@ public class RelationServiceImpl implements RelationService {
}
// TODO: 发送 MQ
// 发送 MQ
// 构造消息体DTO
FollowUserMqDTO followUserMqDTO = FollowUserMqDTO . builder ( )
. userId ( userId )
. followUserId ( followUserId )
. createTime ( now )
. build ( ) ;
// 构造消息对象, 并把DTO转换为JSON字符串设置到消息体中
Message < String > message = MessageBuilder
. withPayload ( JsonUtils . toJsonString ( followUserMqDTO ) )
. build ( ) ;
// 通过冒号连接, 可让 MQ 发送给主题 Topic 时,携带上标签 Tag
String destination = MQConstants . TOPIC_FOLLOW_OR_UNFOLLOW + " : " + MQConstants . TAG_FOLLOW ;
log . info ( " ==> 开始发送关注操作 MQ, 消息体: {} " , followUserMqDTO ) ;
// 异步发送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 ( ) ;
}