Jelajahi Sumber

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

reghao 8 bulan lalu
induk
melakukan
d658f18b95

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

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