• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringCloud Zuul实现负载均衡和熔断机制方式

java 搞代码 4年前 (2022-01-05) 42次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了SpringCloud Zuul实现负载均衡和熔断机制方式,具有很好的参考价值,希望对大家有所帮助。

一、场景

笔者就Zuul网关下实现其负载均衡与熔断机制(雪崩)进行实践,前提是已经导入zuul相关依赖

springboot版本:1.5.9.RELEASE

springcloud版本:Dalston.SR5

   org.springframework.cloudspring-cloud-starter-zuul com.netflix.zuulzuul-core1.3.0

二、场景实现

1、在网关的配置文件中配置ribbon(负载均衡)和hystrix(熔断机制)

 #熔断机制 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)的重试机会,而直接熔断

2、验证负载均衡

因为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; } }

来源gao@daima#com搞(%代@#码@网依次启动注册中心、配置中心、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; /** * @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下的负载均衡和熔断已经实现!

zuul网关配置+限流熔断

被调方:延时600ms

ahas:

user限流:

trade熔断:(3秒内请求数>4)&&(3s内慢调用/请求数>50%) -》》开启熔断

慢调用标准:响应时间大于500ms

20个请求测试:

测试限流:

测试限流和rt熔断

以上为个人经验,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网

以上就是SpringCloud Zuul实现负载均衡和熔断机制方式的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringCloud Zuul实现负载均衡和熔断机制方式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址