其實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();
}
}
下節更精彩!!