一个负载均衡器,至少提供以下功能:
- 要维护各个服务器的IP等信息
- 根据特定的逻辑选取服务器
为了实现基本的负载均衡功能,Ribbon的负载均衡器有三大子模块:
- Rule
- Ping
- ServerList
Ribbon的GitHub上的托管网址是:
https://github.com/Netflix/ribbon
Ribbon在SpringCloud中使用时,配置可以通过两种方式,一种是Java配置,另一种是配置文件配置。
通过java配置:
package com.hurricane.learn.springcloud.ribbon;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Bean;
@RibbonClient(name="user-service-provider",configuration=MyConfig.class)
public class MyConfig {
@Bean
public MyRule createMyRule() {
return new MyRule();
}
}
配置文件配置:
#自定义规则的使用
user-service-provider.ribbon.NFLoadBalancerRuleClassName=com.hurricane.learn.springcloud.ribbon.MyRule
服务调用的一个神坑:
测试服务之间的调用,一直调用不成功,提示:
Request URI does not contain a valid hostname: http://user_service_provider/getUser
最后发现,竟然是因为服务实例名中不能有下划线。将实例名改为aaa就可以进行访问。
参考:
- 杨恩雄的视频教程