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();
    }
}

下節更精彩!!

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