Ribbon客服端 负载均衡工具
先说说@LoadBalanced注解
当你注册两个服务并且name设置一样时,比如10001和10002都为member-service-provider
spring: application: name: member-service-provider
然后一个80服务模块要再controller层通过RestTemplate发送post请求给member-service-provider时,这时要接收的是10001还是10002呢,这时用到loadbalanced注解到RestTemplate Bean
/返回RestTemplate对象,用于http发送,如post get @Bean @LoadBalanced //这个表示给RestTemplate 负载均衡的能力,用轮询算法(eg:先10001再10002,再10001 。。。)去选择某个服务去访问 public RestTemplate getRestTemplate(){ return new RestTemplate(); }
此时controller层只需要修改uri即可
//定义一个url地址 对应 member-service-provider-10000服务
// public static final String MEMBER_SERVICE_PROVIDER_URL =
// "http://localhost:10001"
public static final String MEMBER_SERVICE_PROVIDER_URL =
"http://MEMBER-SERVICE-PROVIDER";
//MEMBER-SERVICE-PROVIDER :表示服务提供方集群,对外暴露的名称,对应k-v值为10001和10002两个微服务
//通过@LoadBalanced注解到RestTemplate,就会用轮询算法选择哪个v值。
接下来说ribbon
负载均衡+RestTemplate 调用
他是进程内LB(Load Balance 负载均衡),就是ribbon消费方服务自动注册到eureka server中,当有个服务80想使用10001服务时,ribbon会去eureka server查询可用服务列表,并通过负载均衡请求拉取该集群的10001服务,自带缓存机制(30秒查询可用服务并缓存到本地,下次就不用请求),相当于一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
Ribbon 常见负载算法
设置ribbon算法
config层
配置算法,这里配置RandomRule算法
@Configuration public class RibbonRule { //配置自己的负载均衡算法 @Bean public IRule myRibbonRule(){ //设置算法RandomRule:随机请求 return new RandomRule(); } }
在对应启动类加注解@RibbonClient,指定configuration为某某算法
@RibbonClient(name = "MEMBER-SERVICE-PROVIDER",configuration = RibbonRule.class) //指定负载均衡算法为RibbonRule类中的myRibbonRule(RandomRule算法) public class MemberConsumerApplication { public static void main(String[] args) { SpringApplication.run(MemberConsumerApplication.class, args); } }