Prechádzať zdrojové kódy

0807 整合sentinel

Qing 9 mesiacov pred
rodič
commit
4c6360e724

+ 6 - 5
novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/client/BookFeign.java

@@ -1,8 +1,8 @@
 package com.sf.book.client;
 
-import com.sf.book.dto.BookCommentRespDto;
-import com.sf.book.dto.BookInfoRespDto;
-import com.sf.core.dto.PageReqDto;
+import com.sf.book.client.dto.BookCommentRespDto;
+import com.sf.book.client.dto.BookInfoRespDto;
+import com.sf.book.client.fallback.BookFeignFallback;
 import com.sf.core.dto.PageRespDto;
 import com.sf.core.dto.RestResp;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -13,7 +13,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 import java.util.List;
 
 // 把feign的客户端写在api
-@FeignClient("novel-book-service")
+@FeignClient(value = "novel-book-service", fallback = BookFeignFallback.class)
+//@FeignClient(value = "novel-book-service")
 public interface BookFeign {
 
     @PostMapping("/api/inner/book/listBookInfoByIds")
@@ -21,5 +22,5 @@ public interface BookFeign {
 
     @GetMapping("/api/inner/book/listCommentsByUserId")
     RestResp<PageRespDto<BookCommentRespDto>> listCommentsByUserId(
-            @RequestParam("userId") Long userId, @RequestParam("pageNum")Integer pageNum, @RequestParam("pageSize")Integer pageSize);
+            @RequestParam("userId") Long userId, @RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize);
 }

+ 1 - 1
novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/dto/BookCommentRespDto.java → novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/client/dto/BookCommentRespDto.java

@@ -1,4 +1,4 @@
-package com.sf.book.dto;
+package com.sf.book.client.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

+ 1 - 1
novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/dto/BookInfoRespDto.java → novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/client/dto/BookInfoRespDto.java

@@ -1,4 +1,4 @@
-package com.sf.book.dto;
+package com.sf.book.client.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;

+ 26 - 0
novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/client/fallback/BookFeignFallback.java

@@ -0,0 +1,26 @@
+package com.sf.book.client.fallback;
+
+import com.sf.book.client.BookFeign;
+import com.sf.book.client.dto.BookCommentRespDto;
+import com.sf.book.client.dto.BookInfoRespDto;
+import com.sf.core.dto.PageRespDto;
+import com.sf.core.dto.RestResp;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+// 当book微服务出现问题时 使用的降级方案
+@Component
+public class BookFeignFallback implements BookFeign {
+
+    @Override
+    public RestResp<List<BookInfoRespDto>> listBookInfoByIds(List<Long> bookIds) {
+        return RestResp.ok(new ArrayList<>());
+    }
+
+    @Override
+    public RestResp<PageRespDto<BookCommentRespDto>> listCommentsByUserId(Long userId, Integer pageNum, Integer pageSize) {
+        return RestResp.ok(PageRespDto.of(0, 0, 0, null));
+    }
+}

+ 10 - 1
novel-cloud-demo/novel-core/src/main/resources/application-common.yml

@@ -7,9 +7,18 @@ spring:
         server-addr: 127.0.0.1:8848
         username: nacos
         password: nacos
+    # 配置sentinel的控制台路径
+    sentinel:
+      transport:
+        dashboard: 127.0.0.1:8090
   jackson:
     generator:
       # JSON 序列化时,将所有 Number 类型的属性都转为 String 类型返回,避免前端数据精度丢失的问题。
       # 由于 Javascript 标准规定所有数字处理都应使用 64 位 IEEE 754 浮点值完成,
       # 结果是某些 64 位整数值无法准确表示(尾数只有 51 位宽)
-      write-numbers-as-strings: true
+      write-numbers-as-strings: true
+
+# feign整合sentinel的开关
+feign:
+  sentinel:
+    enabled: true

+ 5 - 4
novel-cloud-demo/novel-home/src/main/java/com/sf/home/service/impl/HomeBookServiceImpl.java

@@ -1,8 +1,7 @@
 package com.sf.home.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sf.book.client.BookFeign;
-import com.sf.book.dto.BookInfoRespDto;
+import com.sf.book.client.dto.BookInfoRespDto;
 import com.sf.core.dto.RestResp;
 import com.sf.home.dto.resp.HomeBookRespDto;
 import com.sf.home.entity.HomeBook;
@@ -10,8 +9,6 @@ import com.sf.home.mapper.HomeBookMapper;
 import com.sf.home.service.IHomeBookService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -59,6 +56,10 @@ public class HomeBookServiceImpl extends ServiceImpl<HomeBookMapper, HomeBook> i
 
         RestResp<List<BookInfoRespDto>> listRestResp = bookFeign.listBookInfoByIds(bookIdList);
         List<BookInfoRespDto> data = listRestResp.getData();
+        if(data == null || data.size() == 0){
+            return list;
+        }
+
         Map<Long, BookInfoRespDto> collected =
                 data.stream().collect(Collectors.toMap(BookInfoRespDto::getId, t -> t));
 

+ 2 - 1
novel-cloud-demo/novel-user/novel-user-api/src/main/java/com/sf/user/client/UserFeign.java

@@ -2,6 +2,7 @@ package com.sf.user.client;
 
 import com.sf.core.dto.RestResp;
 import com.sf.user.client.dto.UserCommentRespDto;
+import com.sf.user.client.fallback.UserFeignFallback;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -9,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import java.util.List;
 
 // 使用微服务名称
-@FeignClient("novel-user-service")
+@FeignClient(value = "novel-user-service", fallback = UserFeignFallback.class)
 public interface UserFeign {
 
     @PostMapping("/api/inner/user/listUserInfoByIds")

+ 19 - 0
novel-cloud-demo/novel-user/novel-user-api/src/main/java/com/sf/user/client/fallback/UserFeignFallback.java

@@ -0,0 +1,19 @@
+package com.sf.user.client.fallback;
+
+import com.sf.core.dto.RestResp;
+import com.sf.user.client.UserFeign;
+import com.sf.user.client.dto.UserCommentRespDto;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class UserFeignFallback implements UserFeign {
+
+    @Override
+    public RestResp<List<UserCommentRespDto>> listUserInfoByIds(List<Long> userIds) {
+        // 一般能创建一个空的对象 就创建 而不直接返回null 以避免空指针问题
+        return RestResp.ok(new ArrayList<>());
+    }
+}

+ 1 - 5
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/controller/UserInfoController.java

@@ -1,7 +1,7 @@
 package com.sf.user.controller;
 
 import com.sf.book.client.BookFeign;
-import com.sf.book.dto.BookCommentRespDto;
+import com.sf.book.client.dto.BookCommentRespDto;
 import com.sf.core.dto.PageReqDto;
 import com.sf.core.dto.PageRespDto;
 import com.sf.core.dto.RestResp;
@@ -14,13 +14,9 @@ import com.sf.user.util.UserHolder;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.stereotype.Controller;
 
 import java.io.IOException;
-import java.util.List;
 
 /**
  * <p>