SpringCloud(4)负载均衡策略+重试机制

回顾:spring cloud 基本环境搭建

负载均衡策略

1.1初体验

  • 步骤一:修改pom文件,修改调用方的pom文件,添加test依赖
<!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

在这里插入图片描述

  • 步骤二:编写测试类,在调用方编写Junit测试类
package com.czxy;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

/**
 * Created by cjc.
 */
@SpringBootTest(classes=Client4Application.class)       //Junit和Spring boot整合,将所有实例加载到spring容器。
@RunWith(SpringRunner.class)        //JUnit和Spring整合,将spring容器中的数据注入当前类
public class TestRibbon {
    @Resource
    private RibbonLoadBalancerClient client;

    @Test
    public void testDemo(){
        // 通过“服务名”获得对应服务实例
        for (int i = 0; i < 10; i++) {
            ServiceInstance instance = client.choose("servic");
            System.out.println(instance.getHost() + ":" + instance.getPort());
        }
    }
}
  • 步骤三:修改提供方yml文件,支持显示IP地址,并重启8081和8082
#服务名
spring:
  application:
    name: servic
#注册地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
  instance:
    prefer-ip-address: true   #显示IP地址

1.2 修改策略

  • 给指定的“服务”设置策略
服务名.ribbon.NFLoadBalancerRuleClassName=策略实现类
servic:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule    #随机
    #NFLoadBalancerRuleClassName : com.netflix.loadbalancer.BestAvailableRule           #并发最少
    #NFLoadBalancerRuleClassName : com.netflix.loadbalancer.WeightedResponseTimeRule    #请求时间权重

2 重试机制

  • 重试机制:服务B访问集群环境下的服务A,某一个服务A宕机,服务B将尝试访问其他可以使用的服务A。
    • 9090访问 8081和8082
    • 如果8082宕机了
    • 9090将尝试访问8081
  • 步骤一:修改pom文件,添加重试retry依赖
<!--重试机制-->
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
  • 步骤二:修改yml文件,开启cloud重试机制
spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true   #开启重试机制
  • 步骤三:修改yml文件,配置当前服务的重试参数
servic:
  ribbon:
    ConnectTimeout: 250               # Ribbon的连接超时时间
    ReadTimeout: 1000                 # Ribbon的数据读取超时时间
    OkToRetryOnAllOperations: true    # 是否对所有操作都进行重试
    MaxAutoRetriesNextServer: 1       # 切换实例的重试次数
    MaxAutoRetries: 1                 # 对当前实例的重试次数
发布了31 篇原创文章 · 获赞 11 · 访问量 834

猜你喜欢

转载自blog.csdn.net/Eros1onz/article/details/103483216