@LoadBalanced注解的作用
1.开启负载均衡的功能:开启负载均衡很简单,只需要在RestTemplate的bean上再添加一个@LoadBalanced注解即可。
2.由于加了@LoadBalanced注解,使用RestTemplateCustomizer对所有标注了@LoadBalanced的RestTemplate Bean添加了一个LoadBalancerInterceptor拦截器。利用RestTempllate的拦截器,spring可以对restTemplate bean进行定制,加入loadbalance拦截器进行ip:port的替换,也就是将请求的地址中的服务逻辑名转为具体的服务地址。
3、另外当spring容器中有多个相同类型的bean的时候,可以通过@LoadBalanced来进行区分,以便在注入的时候明确表明你要注入具体的哪个bean,消除歧义。
4、@LoadBalanced就是一个修饰符,和@Qualifier一样,标注了@Qualifier("invalid")的user bean都会自动注入到Bean、List和Map中去。
在上一节中,我们无法通过
return this.restTemplate.getForObject("http://ms-eureka-provider/eureka-provider/" + id, User.class);
这条语句进行访问,现在需要在restTmepleate新生成的bean上面添加@LoadBalanced注解:
@LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); }
修改之前:
修改后:
package com.ljf.weifuwu.springcloud.eureka.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
* Hello world!
*
*/
@SpringBootApplication
@EnableEurekaClient
public class ConsumerEurekaApp
{ @LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main( String[] args )
{
SpringApplication.run(ConsumerEurekaApp.class, args);
System.out.println( "eureka-consumer启动起来了!!!" );
}
}