javascript
SpringCloud Zuul(二)之简单用法
一、引用Zuul
要將Zuul引用在項目中,請使用組ID為org.springframework.cloud和工件ID為的啟動器spring-cloud-starter-netflix-zuul。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId><version>2.1.3.RELEASE</version></dependency>?
二、嵌入Zuul反向代理
Spring Cloud嵌入Zuul代理,以簡化UI應用程序要對一個或多個后端服務進行代理調用的常見用例的開發。此功能對于用戶界面代理所需的后端服務很有用,從而避免了為所有后端獨立管理CORS和身份驗證問題的需求。
要啟用它,請使用注釋Spring Boot主類@EnableZuulProxy。這樣做會導致將本地請求轉發到適當的服務。
按照慣例,ID為users的服務從位于的代理/users(去掉前綴)接收請求。代理使用功能區來定位要通過發現轉發到的實例。所有請求均在hystrix命令中執行,因此失敗會顯示在Hystrix指標中。一旦電路斷開,代理就不會嘗試與服務聯系。
注:
Zuul啟動器不包括服務發現的客戶端,對于使用服務ID作為轉發的路由,您還需要在類路徑上提供服務發現的客戶端(Eureka是其中的一種選擇)。 (1)zuul.ignored-services與routes想要跳過自動配置服務路由的步驟,請設置zuul.ignored-services為服務ID模式的列表。如果服務與被忽略但仍包含在顯式配置的路由映射中的模式匹配,則將其忽略,如以下示例所示:
application.yml zuul:ignoredServices: '*'routes:users: /myusers/**在上面的例子中,所有的服務都將被忽略,除了為users。
要增加或更改代理路由,可以添加外部配置,如下所示:
application.yml zuul:routes:users: /myusers/**前面的示例意味著HTTP調用要/myusers轉發到users服務(例如/myusers/101轉發到/101)。
要對路由進行更細粒度的控制,可以分別指定路徑和serviceId,如下所示:
application.yml zuul:routes:users:path: /myusers/**serviceId: users_service前面的示例意味著HTTP調用將/myusers轉發到該users_service服務。路由必須具有path可以指定為ant風格模式的,因此/myusers/*只能匹配一個級別,但可以/myusers/**分層匹配。
后端的位置可以指定為serviceId(用于發現服務)或url(物理位置),如以下示例所示:
application.yml zuul:routes:users:path: /myusers/**url: https://example.com/users_service(2)?hystrix.command和ribbon
這些簡單的url-routes不會以的形式執行HystrixCommand,也不會使用Ribbon負載均衡多個URL。為了實現這些目標,您可以指定一個serviceId帶有靜態服務器列表的,如下所示:
application.yml zuul:routes:echo:path: /myusers/**serviceId: myusers-servicestripPrefix: truehystrix:command:myusers-service:execution:isolation:thread:timeoutInMilliseconds: ...myusers-service:ribbon:NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerListlistOfServers: https://example1.com,http://example2.comConnectTimeout: 1000ReadTimeout: 3000MaxTotalHttpConnections: 500MaxConnectionsPerHost: 100另一種方法是指定服務路由并配置一個Ribbon客戶端serviceId(這樣做需要在Ribbon中禁用Eureka支持-有關更多信息,請參見上文),如以下示例所示:
application.yml zuul:routes:users:path: /myusers/**serviceId: usersribbon:eureka:enabled: falseusers:ribbon:listOfServers: example.com,google.com(3)PatternServiceRouteMapper?
您可以使用來提供serviceId和之間的約定正則映射。它使用正則表達式命名組從中提取變量serviceId并將其注入路由模式,如以下示例所示:
ApplicationConfiguration.java @Bean public PatternServiceRouteMapper serviceRouteMapper() {return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)","${version}/${name}"); }上面的示例指的是serviceId的myusers-v1被映射到路線/v1/myusers/**。可以接受任何正則表達式,但所有命名組都必須同時存在于servicePattern和中routePattern。如果servicePattern與不匹配serviceId,則使用默認行為。在前面的示例中,serviceIdofmyusers映射到“ / myusers / **”路由(未檢測到版本)。默認情況下,此功能是禁用的,僅適用于發現的服務。
(4)zuul.prefix
要為所有映射添加前綴,請設置zuul.prefix一個值,例如/api。默認情況下,代理前綴會從請求中剝離,然后再轉發請求(您可以使用來關閉此行為zuul.stripPrefix=false)。您還可以關閉從單個路由中剝離特定于服務的前綴,如以下示例所示:
application.yml zuul:routes:users:path: /myusers/**stripPrefix: false 注:zuul.stripPrefix僅適用于中設置的前綴zuul.prefix。它對給定路由中定義的前綴沒有任何影響path。 (5)zuul.retryable 在前面的例子中,請求到/myusers/101轉發到/myusers/101在users服務。這些zuul.routes條目實際上綁定到類型的對象ZuulProperties。如果查看該對象的屬性,則可以看到它也有一個retryable標志。設置該標志以true使功能區客戶端自動重試失敗的請求。您還可以將該標志設置為何true時需要修改使用功能區客戶端配置的重試操作的參數。
(6)zuul.addProxyHeaders
默認情況下,X-Forwarded-Host標頭被添加到轉發的請求中。要關閉它,請設置zuul.addProxyHeaders = false。默認情況下,前綴路徑被剝離,并且后端的請求選擇一個X-Forwarded-Prefix標頭(/myusers在前面顯示的示例中)。
(7)默認路由(/)
如果設置默認路由(/),則具有的應用程序@EnableZuulProxy可以充當獨立服務器。例如,zuul.route.home: /將所有流量(“ / **”)路由到“ home”服務。
如果需要更細粒度的忽略,則可以指定要忽略的特定模式。這些模式在路線定位過程開始時進行評估,這意味著模式中應包含前綴以保證匹配。被忽略的模式跨越所有服務,并取代任何其他路由規范。以下示例顯示了如何創建忽略的模式:
application.yml zuul:ignoredPatterns: /**/admin/**routes:users: /myusers/**前面的示例意味著所有呼叫(例如/myusers/101)都被轉發到/101該users服務上。但是,包括在內的呼叫/admin/無法解決。
注:如果需要保留路由的順序,則需要使用YAML文件,因為使用properties文件時順序會丟失。
以下示例顯示了這樣的YAML文件:
application.yml zuul:routes:users:path: /myusers/**legacy:path: /**如果要使用properties?文件,則該legacy路徑可能會終止于該users?路徑的前面,從而導致該users路徑不可訪問。
?
?
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的SpringCloud Zuul(二)之简单用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf对电脑的配置要求高吗(dnf对电脑
- 下一篇: gradle idea java ssm