Prechádzať zdrojové kódy

content-service 添加 spring-cloud-starter-openfeign 依赖实现 SpringCloud 的服务间调用

reghao 8 mesiacov pred
rodič
commit
d658f18b95

+ 4 - 0
content/content-service/pom.xml

@@ -145,6 +145,10 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-bootstrap</artifactId>
         </dependency>-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 13 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/feign/FeignClientConfig.java

@@ -0,0 +1,13 @@
+package cn.reghao.tnb.content.app.vod.feign;
+
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author reghao
+ * @date 2025-07-20 17:25:49
+ */
+@Configuration
+@EnableFeignClients
+public class FeignClientConfig {
+}

+ 16 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/feign/UserFeignClient.java

@@ -0,0 +1,16 @@
+package cn.reghao.tnb.content.app.vod.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author reghao
+ * @date 2025-07-19 23:57:25
+ */
+@FeignClient(value = "user-service")
+public interface UserFeignClient {
+    @GetMapping(value = "/api/user/feign/info", produces = MediaType.APPLICATION_JSON_VALUE)
+    String getUserInfo(@RequestParam("userId") Long userId);
+}

+ 9 - 1
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/impl/VideoPostQueryImpl.java

@@ -3,6 +3,7 @@ package cn.reghao.tnb.content.app.vod.service.impl;
 import cn.reghao.file.api.iface.OssService;
 import cn.reghao.jutil.jdk.db.Page;
 import cn.reghao.jutil.jdk.db.PageList;
+import cn.reghao.jutil.jdk.serializer.JsonConverter;
 import cn.reghao.jutil.web.WebResult;
 import cn.reghao.oss.sdk.model.dto.media.VideoInfo;
 import cn.reghao.oss.sdk.model.dto.media.VideoUrlDto;
@@ -16,6 +17,7 @@ import cn.reghao.tnb.content.api.dto.VideoCard;
 import cn.reghao.tnb.content.api.dto.VideoPostCard;
 import cn.reghao.tnb.content.app.vod.db.mapper.*;
 import cn.reghao.tnb.content.app.vod.db.repository.VideoRepository;
+import cn.reghao.tnb.content.app.vod.feign.UserFeignClient;
 import cn.reghao.tnb.content.app.vod.model.po.*;
 import cn.reghao.tnb.content.app.vod.model.vo.BannerVideoVO;
 import cn.reghao.tnb.content.app.vod.model.vo.VideoDetail;
@@ -24,6 +26,7 @@ import cn.reghao.tnb.content.app.vod.service.CategoryService;
 import cn.reghao.tnb.content.app.vod.service.ContentPermission;
 import cn.reghao.tnb.content.app.vod.service.VideoPostQuery;
 import cn.reghao.tnb.user.api.dto.UserCard;
+import cn.reghao.tnb.user.api.dto.UserInfo;
 import cn.reghao.tnb.user.api.iface.UserService;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
@@ -61,12 +64,13 @@ public class VideoPostQueryImpl implements VideoPostQuery {
     private final VideoRepository videoRepository;
     private final Random random = new SecureRandom();
     private final BannerVideoMapper bannerVideoMapper;
+    private final UserFeignClient userFeignClient;
 
     public VideoPostQueryImpl(VideoPostMapper videoPostMapper, VideoFileMapper videoFileMapper, VideoTagMapper videoTagMapper,
                               VideoStatisticMapper videoStatisticMapper, VideoCategoryPostMapper videoCategoryPostMapper,
                               ContentPermission contentPermission, CategoryService categoryService,
                               VideoRepository videoRepository, VideoPostTagMapper videoPostTagMapper,
-                              BannerVideoMapper bannerVideoMapper) {
+                              BannerVideoMapper bannerVideoMapper, UserFeignClient userFeignClient) {
         this.videoPostMapper = videoPostMapper;
         this.videoFileMapper = videoFileMapper;
         this.videoTagMapper = videoTagMapper;
@@ -77,6 +81,7 @@ public class VideoPostQueryImpl implements VideoPostQuery {
         this.videoRepository = videoRepository;
         this.videoPostTagMapper = videoPostTagMapper;
         this.bannerVideoMapper = bannerVideoMapper;
+        this.userFeignClient = userFeignClient;
     }
 
     public List<VideoCard> getVideoCards(List<String> videoIds) {
@@ -257,6 +262,9 @@ public class VideoPostQueryImpl implements VideoPostQuery {
         }
 
         long publishBy = videoPost.getPublishBy();
+        String userInfoJson = userFeignClient.getUserInfo(publishBy);
+        UserInfo userInfo = JsonConverter.jsonToObject(userInfoJson, UserInfo.class);
+
         String publishByStr = accountQuery.getUserIdStr(publishBy);
         VideoStatistic videoStatistic = videoStatisticMapper.findByVideoId(videoId);
         VideoDetail videoDetail = new VideoDetail(videoPost, videoStatistic, publishByStr);