springcloud 微服务(四) 集成Ribbon实现负载均衡

其实euraka已经默认集成了ribbon实现的是轮训方式的负载均衡,我们可以测试下。接上篇博客的代码:
springcloud 微服务(二) 集成Feign组件 跨服务调用实例

一.启动多个user提供者微服务实例

1.将user 打成jar包,此时端口是8881 , 然后 :java -jar 启动
2.将user在打成另一个jar,此时端口是8882 ,然后 :java -jar 启动
3.观察注册中心,user有2个实例:
在这里插入图片描述

二.改造服务消费者item微服务,打印请求服务端口

1.在我们消费者item微服务的controller中增加代码:

    @Autowired
    private LoadBalancerClient loadBalancerClient;
    
    /**
     * 打印 负载 均衡信息
     * 
     * @param serviceId
     * @return
     * @author HadLuo 2020年5月20日 新建
     */
    @RequestMapping(value = "/testLoadBalancerClient", method = RequestMethod.GET)
    String testLoadBalancerClient(String serviceId) {
        ServiceInstance snstance = loadBalancerClient.choose(serviceId);

        String ret = "host=" + snstance.getHost() + ",InstanceId=" + snstance.getInstanceId() + ",port="
                + snstance.getPort() + ",Scheme=" + snstance.getScheme() + ",ServiceId="
                + snstance.getServiceId() + ",Metadata=" + new Gson().toJson(snstance.getMetadata());

        System.err.println(ret);
        return ret;
    }

上面代码就是为了打印调用对应的serviceId 的服务的ip和端口。

2.当我们浏览器多次访问: http://localhost:8880/testLoadBalancerClient?serviceId=user
在这里插入图片描述
后台会打印调用user微服务的端口,发现都是轮询的。

三.将负载均衡模式改为随机模式

1.在item消费者里面的启动类添加:

@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = "com.hadluo"})
//// 针对单独的 client 设置,可设置多个
@RibbonClients(value = {
        // 对 user 实例访问时 负载均衡的配置采用 RibbonConfigure 配置类的
        @RibbonClient(name = "user", configuration = RibbonConfigure.class) }
)
public class ItemApplication {

    public static void main(String[] args) {
        SpringApplication.run(ItemApplication.class, args);
    }
}

代码解释: 对调用user服务时才用RibbonConfigure.class的配置
2.RibbonConfigure.class代码:

public class RibbonConfigure {

    @Bean
    public IRule ribbonRule() {
        System.err.println("ribbon负载均衡配置加载!");
        return new RandomRule();//随机方式
    }

}

3.启动item服务,多次访问测试 : http://localhost:8880/testLoadBalancerClient?serviceId=user
在这里插入图片描述
变成毫无规律的访问了。

四.全局配置负载均衡

上面都是针对单个或者多个实例来配置,如果我们要对所有的实例配置,则只需要将配置加上@Configuration注解就行了

@Configuration
public class RibbonConfigure {

    @Bean
    public IRule ribbonRule() {
        System.err.println("ribbon负载均衡配置加载!");
        return new RandomRule();
    }
}

下节更精彩!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章