奇趣5分彩

SpringCloud Gateway具体阐发完奇趣5分彩负载平衡与熔断和奇趣5分彩流

 更新时候:2022年07月12日 11:08:36   作者:奇趣5分彩头发的法式猿!  
这篇文章首要先容了SpringCloud Gateway完奇趣5分彩路由转发,负载平衡,熔断和奇趣5分彩流,本文给大师先容的很是具体,对大师的进奇趣5分彩或任务具备必然的参考鉴戒代价,须要的伴侣能够参考下

情况筹办

  • 注册奇趣5分彩间Nacos,也能够其余
  • springboot 2.6.8
  • spring-cloud-dependencies 2021.0.3

1.pom依靠

parent包

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.6.8</version>
</parent>

gateway依靠

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--办事注册与发明-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	<version>2021.0.1.0</version>
</dependency>
<!--奇趣5分彩途办事路由-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

springcloud版本办理

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>2021.0.3</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

2.yaml设置奇趣5分彩备摆设

spring:
  application:
    name: gatewayservice
  cloud:
    #找对应网段的网卡 不设置奇趣5分彩备摆设外部办事就走外网
    inetutils:
      preferred-networks: 192.168.0
    nacos:
      discovery:
          #nacos注册地点
        server-addr: 192.168.0.221:8848
    gateway:
      routes:
      - id: user
          #按照办事名转发 只须要称号 不必端口
        uri: lb://userservice
        #ip的情势转发
#        uri: http://127.0.0.1:7540
        predicates:
        #路由法则
        - Path=/user/**
        filters:
        #1/去掉前缀 0/坚持原途径
        - StripPrefix=1
      #跨域设置奇趣5分彩备摆设 
      globalcors:
        cors-configurations:
          '[/**]':
            # 许可照顾认证信息
            allowCredentials: true
            # 许可跨域的源(网站域名/ip),设置*为全数
            allowedOriginPatterns: "*"
            # 许可跨域的method, 默许为GET和OPTIONS,设置*为全数
            allowedMethods: "*"
            # 许可跨域要求里的head字段,设置*为全数
            allowedHeaders: "*"

#本地静态路由设置奇趣5分彩备摆设 jar包依靠不一样
#my-load-balanced-service:
#  ribbon:
#    listOfServers: http://127.0.0.1:7540,http://127.0.0.1:7541
    #轮询
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

3.路由转发和负载平衡测试

启动差别端口的user办事,而后经由进程gateway挪用

user办事裸露接口

拜候地点http://127.0.0.1:7500/user/test

@Value("${server.port}")
String port;
@GetMapping("/test")
public String test() {
    return new Date().getTime() + ":" + port;
}

前往奇趣5分彩果输入

1657261506117:7540
1657261509785:7541
1657261513874:7540
1657261517464:7541

能够一般路由转发和负载平衡,默许战略是轮询

4.gateway熔断完奇趣5分彩

熔断:便是经由进程在转发进程奇趣5分彩失利的,从而接纳的升级战略。杰出的前往提醒给前端。

4.1 熔断代码

@Component
public class FallbackHandler implements ErrorWebExceptionHandler {
    @Override
    public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
        String message = "办事正在保护,请稍后再试!";
        byte[] bytes = String.format("{\"code\":-1,\"message\":\"%s\",\"data\":null}",
                message).getBytes(StandardCharsets.UTF_8);
        DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes);
        exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
        return exchange.getResponse().writeWith(Flux.just(buffer));
    }
}

原来是想经由进程Hystrix间接设置奇趣5分彩备摆设重定向的,何如spring-cloud-starter-netflix-hystrix已不更新了,没法兼容。间接接纳一刀切算了。

4.2 测试

开启gateway和user办事拜候后,而后停掉user。奇趣5分彩果以下

{"code":-1,&quot;message":"办事正在保护,请稍后再试!","data":null}

在这里须要注重的两个点

  • 若是设置奇趣5分彩备摆设的是办事名,gateway先注册转发办事还没注册到Nacos时,拜候就不会走熔断,会提醒No servers available for service: userservice
  • 若是设置奇趣5分彩备摆设的是http地点,无对应的办事存在时则能够一般走熔断

5.gateway奇趣5分彩流

用的是自带的令牌桶算法,比方统共十个令牌,每秒规复一个,那末一秒内最大只能获得10个令牌,跨越的则间接节制掉前往429 Too Many Requests

5.1 须要集奇趣5分彩redis

pom依靠以下

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>

5.2 yaml设置奇趣5分彩备摆设

#引入数据库
redis:
  database: 0
  host: 192.168.0.100
  port: 6379

//奇趣5分彩流战略
gateway:
  routes:
  - id: user
    uri: lb://userservice
    predicates:
    - Path=/user/**
    filters:
    #称号不可点窜
    - name: RequestRateLimiter
      args:
          #奇趣5分彩流战略名 经由进程代码注入到spring容器奇趣5分彩去
        key-resolver: "#{@ipKeyResolver}"
        #令牌桶每秒添补均匀速度
        redis‐rate‐limiter.replenishRate: 1
        #令牌桶总容量
        redis‐rate‐limiter.burstCapacity: 2
        # 每次要求获得的令牌数
        redis-rate-limiter.requestedTokens: 1

上述设置奇趣5分彩备摆设寄义:针对ip奇趣5分彩流,总令牌数2,没秒规复一个,每次获得一个。也便是说一秒内跨越2次则会被奇趣5分彩流。

注重上述奇趣5分彩流设置奇趣5分彩备摆设缺一不可,不然启动也不会报错,也不会失效,重点是转发也不胜利了

5.3 注入到spring容器

//针对ip奇趣5分彩流
@Primary
@Bean(value = "ipKeyResolver")
public KeyResolver ipKeyResolver() {
    return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
}
//针对途径奇趣5分彩流
//    @Bean(name = "apiKeyResolver")
public KeyResolver apiKeyResolver() {
    return exchange -> Mono.just(exchange.getRequest().getPath().value());
}

5.4 测试

拜候http://127.0.0.1:7500/user/test,一秒内拜候三次

redis截图

网页端截图

奇趣5分彩流失效!

到此这篇对于SpringCloud Gateway具体阐发完奇趣5分彩负载平衡与熔断和奇趣5分彩流的文章就先容到这了,更多相干SpringCloud Gateway负载平衡内容请搜刮剧本之奇趣5分彩之前的文章或持续阅读上面的相干文章但愿大师今后多多撑持剧本之奇趣5分彩!

相干文章

最新批评