基本功能簡介如下:
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"}]
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 自我掃描註冊
畢竟在社區上得到很多幫助,希望也可以幫助需要做網關的人