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

作者:浅然言而信 时间:2023-08-23 11:56:43 

一、场景

笔者就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: 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;
   }
}

依次启动注册中心、配置中心、client服务、修改端口再次启动client服务、服务网关

根据网关的路由,访问同一个路由,发现启动的两个不同端口的client服务交替执行

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

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

出现该情况即实现了负载均衡

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()中的提示,即实现了熔断机制

SpringCloud Zuul实现负载均衡和熔断机制方式好了,zuul下的负载均衡和熔断已经实现!

zuul网关配置+限流熔断

被调方:延时600ms

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

ahas:

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

user限流:

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

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

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

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

20个请求测试:

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

测试限流:

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

测试限流和rt熔断

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://xulinjie.blog.csdn.net/article/details/83796214

标签:SpringCloud,Zuul,负载均衡,熔断
0
投稿

猜你喜欢

  • android提取视频多张图片和视频信息实例

    2022-12-10 06:37:04
  • java面试题之数组中的逆序对

    2021-08-05 10:51:02
  • Java Switch对各类型支持实现原理

    2023-10-28 04:45:37
  • Unity中C#和Java的相互调用实例代码

    2022-02-28 13:40:53
  • C#实现多个计时器记录不同定时时间

    2023-01-31 17:56:33
  • 自定义spring mvc的json视图实现思路解析

    2023-03-12 12:04:44
  • Unity 读取文件 TextAsset读取配置文件方式

    2023-07-05 12:24:05
  • SpringBoot接入支付宝支付的方法步骤

    2022-02-16 05:34:16
  • Java编程探索之泛型擦除实例解析

    2022-08-30 02:13:35
  • Android编程之利用服务实现电话监听的方法

    2022-02-16 03:59:42
  • Spring框架学习常用注解汇总

    2023-11-10 17:38:53
  • Apache Commons fileUpload文件上传多个示例分享

    2021-11-13 07:23:51
  • 深入了解c# 迭代器和列举器

    2022-04-24 16:32:37
  • Android毕业设计备忘录APP

    2023-12-25 02:28:17
  • C# 数独求解算法的实现

    2022-04-04 18:48:57
  • Spring boot2X Consul如何使用Feign实现服务调用

    2022-04-29 14:41:18
  • C#读写指定编码格式的文本文件

    2023-06-16 03:45:41
  • Unity键盘WASD实现物体移动

    2021-06-14 13:46:21
  • Spring BeanDefinition使用介绍

    2023-11-24 10:29:10
  • MyBatis逆向工程基本操作及代码实例

    2022-12-19 04:09:27
  • asp之家 软件编程 m.aspxhome.com