小编给大家分享一下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>
二、场景实现
1、在网关的配置文件中配置ribbon(负载均衡)和hystrix(熔断机制)
#熔断机制hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 6000 #负载均衡ribbon: ConnectionTimeout: 500 ReadTimeout: 2000#端口server: port: 8080spring: #该配置文件中的配置,对应的服务名称是wc-gateway application: name: wc-gateway profiles: active: dev#服务网关配置zuul: host: connect-timeout-millis: 60000 socket-timeout-millis: 60000 #路由规则 routes: api: path: /api/user@RestControllerpublic class UserController { @Value("${server.port}") private int port; @RequestMapping("index") public String index(){ return "Hello World!"+port; }}
依次启动注册中心、配置中心、client服务、修改端口再次启动client服务、服务网关
根据网关的路由,访问同一个路由,发现启动的两个不同端口的client服务交替执行
出现该情况即实现了负载均衡
3、验证熔断机制
在网关服务中需要写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; @Componentpublic 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下的负载均衡和熔断已经实现!
zuul网关配置+限流熔断
被调方:延时600ms
ahas:
user限流:
trade熔断:(3秒内请求数>4)&&(3s内慢调用/请求数>50%) -》》开启熔断
慢调用标准:响应时间大于500ms
20个请求测试:
测试限流:
测试限流和rt熔断
以上是“SpringCloud Zuul怎么实现负载均衡和熔断机制”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!