简单实验 java spring cloud 自定义负载均衡

1.概要

1.1 说明

这个是在前一个测试上的修改,所以这里只体现修改的内容。前一个测试的地址:检查实验 spring cloud nacos nacos-server-2.3.0-优快云博客

1.2 记忆要点

1.2.1 引入对象

@Autowired
DiscoveryClient discoveryClient;

1.2.2 获取服务实例 

List<ServiceInstance> serviceInstances = discoveryClient.getInstances("server3");
int index = new Random().nextInt(serviceInstances.size());
ServiceInstance serviceInstance = serviceInstances.get(index);

1.2.3 利用服务实例调用函数 

String url = "http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/fun";

2.代码变更

package com.xjc.springcloundtest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;
import java.util.Random;

@RestController
public class TestController2 {

    @Autowired
    DiscoveryClient discoveryClient;
    //@Autowired
    //FenTest fenTest;
    @Autowired
    RestTemplate restTemplate;
    @RequestMapping("/fun2")
    public String fun2(){

        List<ServiceInstance> serviceInstances = discoveryClient.getInstances("server3");
        int index = new Random().nextInt(serviceInstances.size());
        ServiceInstance serviceInstance = serviceInstances.get(index);
        //String url = "http://localhost:8080/fun";
        //String url = "http://server3/fun";
        String url = "http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/fun";
        //String ret = fenTest.fun();
        String ret = restTemplate.getForObject(url,String.class);
        return "函数2"+ret;
    }
}

3 运行结果

### 自定义 Spring Cloud 负载均衡策略的配置方法 在 Spring Cloud 中,可以通过多种方式实现对负载均衡策略的自定义配置,主要依赖于 Ribbon 或 Spring Cloud LoadBalancer。虽然 Ribbon 在较新的版本中已被 Spring Cloud LoadBalancer 取代,但其部分配置方式仍然适用。 #### 使用 `application.yml` 文件进行全局或服务级配置 从 Spring Cloud 1.2.0 开始,支持通过 `application.yml` 文件直接配置 Ribbon 客户端的行为,无需额外编写 Java 配置类。例如,为特定服务设置随机负载均衡策略: ```yaml my-service: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule ``` 上述配置表示为名为 `my-service` 的服务实例指定使用 `RandomRule`(随机选择)作为负载均衡算法。这种方式简化了多环境下的配置管理,使得不同环境可以灵活调整 Ribbon 行为[^1]。 #### 自定义 Ribbon 负载均衡策略 除了通过配置文件设置负载均衡规则外,还可以通过创建配置类来实现更复杂的自定义逻辑。例如,定义一个配置类指定某个服务使用的负载均衡策略: ```java @Configuration public class RibbonConfig { @Bean public IRule ribbonRule() { return new RandomRule(); // 使用随机策略 } } ``` 然后,在主应用类或配置类上使用 `@RibbonClient` 注解绑定该配置到具体的服务客户端: ```java @RibbonClient(name = "my-service", configuration = RibbonConfig.class) public interface MyServiceClient { // 接口定义 } ``` 此方式适用于需要为多个服务提供不同负载均衡行为的场景,但当配置项较多时,维护成本较高[^3]。 #### 使用 Spring Cloud LoadBalancer 替代 Ribbon 从 Spring Cloud 2020.0(Ilford)版本开始,官方推荐逐步迁移到 Spring Cloud LoadBalancer,因为 Netflix Ribbon 已进入维护模式。新版本的 Spring Cloud Gateway 内部负载均衡组件也已统一使用 Spring Cloud LoadBalancer。 对于 Spring Cloud Gateway 3.x 版本,若需自定义负载均衡策略,可以通过实现 `ReactorServiceInstanceLoadBalancer` 接口来自定义负载均衡器,将其注册为 Bean: ```java @Bean public ReactorServiceInstanceLoadBalancer customLoadBalancer(ServiceInstanceListSupplier instanceProvider) { return new CustomLoadBalancer(instanceProvider); } ``` 其中 `CustomLoadBalancer` 是开发者自行实现的负载均衡逻辑类[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值