pom.xml:
<?xml version="1.0" encoding="utf-8"?>
cloud-demo
cn.hao.learning
1.0-snapshot
4.0.0
gateway
org.springframework.cloud
spring-cloud-starter-netflix-zuul
com.fasterxml.jackson.core
jackson-databind
2.8.9
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.apache.commons
commons-lang3
3.8.1
import org.springframework.cloud.netflix.zuul.enablezuulproxy;
/** * @author: hao
* @description: 閘道器
* @date: 2020/2/27 20:43
* @version: 1.0
*/@enablezuulproxy
public static void main(string args) }
zuul中的配置可參考: org.springframework.cloud.netflix.zuul.filters.zuulproperties
server:
port: 10010
spring:
name: gateway # 應用名稱,會在eureka中顯示
eureka:
client:
eureka.client.fetch-registry: true # 當服務消費者啟動是,會檢測eureka.client.fetch-registry引數的值,如果為true,則會從eureka server服務的列表唯讀備份,然後快取在本地,並且預設每隔30秒會重新獲取並更新資料
registry-fetch-interval-seconds: 5 # 每隔5秒會重新獲取並更新eureka server服務的列表
register-with-eureka: true # 是否註冊自己的資訊到eurekaserver,預設是true
fetch-registry: true # 是否拉取其它服務的資訊,預設是true
service-url: # eurekaserver的位址,現在是自己的位址,如果是集群,需要加上其它server的位址。
defaultzone:
instance:
prefer-ip-address: true # 當呼叫gethostname獲取例項的hostname時,返回ip而不是host名稱
ip-address: 127.0.0.1 # 指定自己的ip資訊,不指定的話會自己尋找
假設有乙個使用者服務:訪問id為6的使用者。不配置zuul,預設zuul會自動從eureka中拉取所有服務列表,閘道器ip、port後的匹配字首為serviceid。如serviceid為user-service,訪問閘道器位址跳轉訪問
如下配置:可以新增也能跳轉訪問zuul:
routes:
user-service: #routes的自定義id,不重複的話寫什麼都可以,規範上和serviceid保持一致
path: /my-user-service/**
serviceid: user-service
上面對應的簡寫為:格式:serviceid: 字首對映路徑zuul:
routes:
user-service: /my-user-service/**
zuul:
routes:
user-service:
path: /user/**
serviceid: user-service
strip-prefix: false
strip-prefix: true
ignored-services:
- consumer-service
prefix: /api
strip-prefix表示匹配路徑是否保留,可以全域性配置,可以區域性配置。預設true,匹配路徑保留。
ignored-services表示忽略進行閘道器跳轉的服務,格式為:- serviceid
prefix可配置全域性的字首,即跳轉到各服務的共同字首。
當前跳轉訪問。如果區域性配置的那個strip-prefix為true,跳轉訪問
zuulfilter是過濾器的頂級父類。其中定義的4個最重要的方法:自定義過濾器:public abstract zuulfilter implements izuulfilter
filterorder
:通過返回的int值來定義過濾器的執行順序,數字越小優先順序越高。異常流程:
使用場景舉例:
zuul中預設就已經整合了ribbon負載均衡和hystrix熔斷機制。但是所有的超時策略都是走的預設值,比如熔斷超時時間只有1s,很容易就觸發了。@component
public class loginfilter extends zuulfilter
@override
public int filterorder()
@override
public boolean shouldfilter()
@override
public object run() throws zuulexception
// 校驗通過,可以考慮把使用者資訊放入上下文,繼續向後執行
return null;}}
zuul:
retryable: true
ribbon:
connecttimeout: 250 # 連線超時時間(ms)
readtimeout: 2000 # 通訊超時時間(ms)
oktoretryonalloperations: true # 是否對所有操作重試
maxautoretriesnextserver: 2 # 同一服務不同例項的重試次數
maxautoretries: 1 # 同一例項的重試次數
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutinmillisecond: 6000 # 熔斷超時時長:6000ms
Springcloud之Gateway閘道器
官網 匯入依賴 org.springframework.cloud spring cloud starter gateway org.springframework.cloud spring cloud starter netflix eureka client gateway不能匯入spring ...
Springcloud學習系列之Zuul的使用
zuul的作用是服務閘道器,使用者的請求先通過zuul,由zuul 至各服務。由此,zuul可以做很多任務作,如校驗,鑑權等。需要zuul註冊進eureka註冊中心 org.springframework.cloudgroupid spring cloud starter netflix zuula...
Springcloud 系列之feign負載均衡
feign是宣告性的web服務客戶端。它使編寫web服務客戶端更加容易。要使用feign,請建立乙個介面並對其進行注釋。它具有可插入的注釋支援,包括feign注釋和jax rs注釋。feign還支援可插拔編碼器和解碼器。spring cloud新增了對spring mvc注釋的支援,並支援使用spr...