日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gateway集成sentinel实现网关限流

發(fā)布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gateway集成sentinel实现网关限流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、先啟動sentinel

參考文章

二、編寫gateway服務

  • yaml文件
server:port: 2004 spring:cloud:gateway:discovery:locator:enabled: true #開啟從注冊中心動態(tài)創(chuàng)建路由的功能,利用微服務名進行路由routes:- id: sentinel-user-feign #路由的ID,沒有固定規(guī)則但要求唯一,建議配合服務名uri: lb://sentinel-user-feign #根據(jù)服務名稱匹配后提供服務的路由地址,使用負載均衡的方式predicates:- Path=/user/** # 斷言,路徑相匹配的進行路由

三、編寫sentinel-user-feign服務

  • 引入依賴
  • <!--feign對sentinel的支持--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
  • 開啟sentinel支持
    在工程的application.yml中添加sentinel 對 feign 的支持激活sentinel的支持
  • feign:sentinel:enabled: true
  • 調(diào)用端配置FeignClient
  • 需要配置FeignClient接口以及通過 fallback 指定熔斷降級方法

    @FeignClient(value = "client",fallback = ProductFeignHandler.class) public interface ProductFeign {@GetMapping("/product/find")Map<String,Object> find(@RequestParam("id") String id);@GetMapping("/product/finddg")Map<String,Object> pdg(@RequestParam("id") String id); }

    創(chuàng)建一個實現(xiàn)ProductFeign接口的兜底類

    @Component public class ProductFeignHandler implements ProductFeign {@Overridepublic Map<String, Object> find(String id) {Map map=new HashMap(16);map.put("507","遠程調(diào)用服務接口被限流");return map;}// Fallback 函數(shù),函數(shù)簽名與原函數(shù)一致或加一個 Throwable 類型的參數(shù).@Overridepublic Map<String, Object> pdg(String id) {Map map=new HashMap(16);map.put("507","遠程調(diào)用服務接口被降級處理");return map;} }

    調(diào)用端Controller

    @RestController @Slf4j public class UserController {@Autowiredprivate ProductFeign productFeign;@GetMapping("/user/getProductInfo")public Map<String, Object> getProductInfo(String id) {Map<String, Object> map = productFeign.find(id);log.info("返回的信息:[{}]" + map);return map;}@GetMapping("/user/getProductInfodg")public Map<String, Object> getProductInfodg(String id) {Map<String, Object> map = productFeign.pdg(id);log.info("返回的信息:[{}]" + map);return map;} }
  • 被調(diào)用端的Controller
  • @RestController @Slf4j public class ProductController {@Value("${server.port}")private int port;@GetMapping("/product/find")public Map<String, Object> find(@RequestParam("id") String id) {Map<String, Object> map = new HashMap<>();log.info("進入商品服務,當前接收的商品id為:[{}]", id);map.put("status", true);map.put("msg", "當前商品服務調(diào)用成功,查詢商品id為:" + id + ",當前處理服務的端口號為: " + port);return map;}@GetMapping("/product/finddg")public Map<String,Object> pdg(@RequestParam("id") String id){Map<String, Object> map = new HashMap<>();log.info("進入降級接口商品服務,當前接收的商品id為:[{}]", id);map.put("status", true);map.put("msg", "當前通過降級接口商品服務調(diào)用成功,查詢商品id為:" + id + ",當前處理服務的端口號為: " + port);return map;} }

    四、編寫sentinel-product-feign服務

    @RestController @Slf4j public class ProductController {@Value("${server.port}")private int port;@GetMapping("/product/find")public Map<String, Object> find(String id) {Map<String, Object> map = new HashMap<>();log.info("進入商品服務,當前接收的商品id為:[{}]", id);map.put("status", true);map.put("msg", "當前商品服務調(diào)用成功,查詢商品id為:" + id + ",當前處理服務的端口號為: " + port);return map;} }

    五、加入sentinel的限流規(guī)則


    訪問http://localhost:2004/user/getProductInfo?id=7
    經(jīng)由gateway路由后,如果閾值達到限定值,自動限流

    總結

    以上是生活随笔為你收集整理的gateway集成sentinel实现网关限流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。