spring-cloud-gateway實戰 轉發,限速,定時同步,熔斷,日誌記錄

基本功能簡介如下:

1.路由轉發

[{"args":{"pattern":"/getRoute"},"name":"Path"}]
  • 路由信息

在這裏插入圖片描述

  `id` 'route唯一id',
  `location` 'mapping信息',
  `uri` '路由轉發地址',
  `orders`'排序規則 最小值爲1',
  `predicates`'斷言規則',
  `filters` '過濾規則',
  `start_time`'創建時間',
  `status`'是否啓用',
  `version` '版本信息',
  `application_name`'應用名稱',
  `method_type`'方法類型',
  `description`'路由描述 默認爲mapping信息'

   紅色爲必輸項
  • 默認轉發規則
  uri 是配置轉發的服務器地址 , orders 越小越優先 
  predicates 默認使用 路徑轉發
  還支持請求方法類型, 請求頭, cookie, host地址 等等
  fitlers 過濾規則  影響轉發的因素 

2.路由限速 (防止惡意請求)

[{"args":{"key-resolver":"{@apiAndIpKeyResolver}","redis-rate-limiter.burstCapacity":"20","redis-rate-limiter.replenishRate":"5"},"name":"RequestRateLimiter"}]
  • 批量請求轉發路由

在這裏插入圖片描述

  • 未限速效果

在這裏插入圖片描述

  • 限速效果

在這裏插入圖片描述

  • 限速日誌 拋出429錯誤代碼

在這裏插入圖片描述

3.定時同步

  • 數據庫配置定時屬性,支持刷新,暫停,刪除,重啓

在這裏插入圖片描述

4.支持熔斷

舉例
#設置默認熔斷4s
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=4000
#路由增加熔斷過濾 ,默認跳轉fallback
[
    {"args":{"description":"限速過濾規則","key-resolver":"#{@apiAndIpKeyResolver}","redis-rate-limiter.burstCapacity":"20","redis-rate-limiter.replenishRate":"5"},"name":"RequestRateLimiter"},
    {"args":{"name":"default","description":"熔斷過濾規則","fallbackUri":"forward:/fallback"},"name":"Hystrix"}
]
超時提示
	@RequestMapping("/fallback")
	public  ReturnVO fallback() {
		return ReturnVO.fail("服務暫時不可用, 請稍候嘗試 !");
	}

  • 測試代碼
 	@PostMapping("hystrix/test")
	public  String  hystrixTest(@RequestBody JSONObject params) {
		log.info("請求參數==>{}",params);
		try {
			log.info("-----------sleep  5s-------------");
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		log.info("請求完成");
		return "hystrix success!";
	}
  • 不經過網關

在這裏插入圖片描述

  • 網關觸發熔斷

在這裏插入圖片描述

5. 日誌記錄

   記錄網關轉發的以下信息:
  `client_address` '客戶端地址',
  `request_address` '請求地址',
  `gateway_address` '網關轉發地址',
  `url` 'api路徑',
  `method` '請求方法',
  `request_param` '請求參數',
  `request_header` '請求頭',
  `response_body` '請求體',
  `start_time` '請求開始時間',
  `end_time` '請求結束時間',
  `spend_time` '時間差ms'

  當轉發服務器 異常時, 無response_body end_time spend_time

在這裏插入圖片描述

ps:

因爲集成ribbon負載均衡 ,項目結構要重構

項目需要向公司業務耦合, 集成服務發現(沒有用eruka) 使用RequestMappingHandlerMapping 自我掃描註冊

畢竟在社區上得到很多幫助,希望也可以幫助需要做網關的人

gateway-server的源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章