您好,登錄后才能下訂單哦!
小編給大家分享一下SpringCloud Zuul怎么實現負載均衡和熔斷機制,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Zuul網關下實現其負載均衡與熔斷機制(雪崩)進行實踐,前提是已經導入zuul相關依賴
springboot版本:1.5.9.RELEASE
springcloud版本:Dalston.SR5
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>com.netflix.zuul</groupId> <artifactId>zuul-core</artifactId> <version>1.3.0</version> </dependency> </dependencies>
#熔斷機制 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 6000 #負載均衡 ribbon: ConnectionTimeout: 500 ReadTimeout: 2000 #端口 server: port: 8080 spring: #該配置文件中的配置,對應的服務名稱是wc-gateway application: name: wc-gateway profiles: active: dev #服務網關配置 zuul: host: connect-timeout-millis: 60000 socket-timeout-millis: 60000 #路由規則 routes: api: path: /api/user/** serviceId: wc-client-user
其實ribbon的真實值=(ConnectionTimeout+ReadTimeout)*2,該值最好小于hystrix的timeoutInMilliseconds的值,因為如果大于其值會失去負載均衡(ribbon)的重試機會,而直接熔斷
因為zuul下自帶了hystrix,ribbon相關jar包,所有現在已經實現了負載均衡和熔斷機制,接下來進行驗證
在client服務下編寫controller,測試負載均衡
package top.wingcloud.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author: linjie * @description: 用戶服務請求處理控制器 * @create: 2018/11/06 09:16 */ @RestController public class UserController { @Value("${server.port}") private int port; @RequestMapping("index") public String index(){ return "Hello World!"+port; } }
依次啟動注冊中心、配置中心、client服務、修改端口再次啟動client服務、服務網關
根據網關的路由,訪問同一個路由,發現啟動的兩個不同端口的client服務交替執行
出現該情況即實現了負載均衡
在網關服務中需要寫ZuulFallbackProvider的實現類
package top.wingcloud.filter; import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; /** * @author: linjie * @description:錯誤攔截回顯,熔斷 * @create: 2018/10/11 20:01 */ @Component public class ApiFallbackProvider implements ZuulFallbackProvider{ @Override public String getRoute() { //設置熔斷的服務名 //如果是所有服務則設置為* return "wc-client-user"; } @Override public ClientHttpResponse fallbackResponse() { return new ClientHttpResponse() { @Override public HttpStatus getStatusCode() throws IOException { return HttpStatus.OK; } @Override public int getRawStatusCode() throws IOException { return 200; } @Override public String getStatusText() throws IOException { return "{code:0,message:service error =_=}"; } @Override public void close() { } @Override public InputStream getBody() throws IOException { return new ByteArrayInputStream(getStatusText().getBytes()); } @Override public HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); return headers; } }; } }
這個時候關閉client所有服務,再次訪問之前的網關路由
出現了getStatusText()中的提示,即實現了熔斷機制
好了,zuul下的負載均衡和熔斷已經實現!
被調方:延時600ms
ahas:
user限流:
trade熔斷:(3秒內請求數>4)&&(3s內慢調用/請求數>50%) -》》開啟熔斷
慢調用標準:響應時間大于500ms
20個請求測試:
測試限流:
測試限流和rt熔斷
以上是“SpringCloud Zuul怎么實現負載均衡和熔斷機制”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。