文章目录
前言
Ribbon是做客户端的负载均衡用的(服务消费方),合理的分配消费的请求给EurekaServer端(注册中心)。所以加Ribbon的配置是在服务消费方的工程上做,最终能达到使用微服务名称就可以访问对应服务的效果。
1.服务消费方引入Ribbon相关依赖(Ribbon依赖EureKa来做负载均衡,所以需要EureKa相关)
<!--消费端配置负载均衡需要引入 eureka和 ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.消费端的RestTemplate上加注解@LoadBalanced,以及开启EurekaClient和配置yml中EureKa相关
@Configuration
public class Config {
@Bean
@LoadBalanced/*开启Ribbon负载均衡*/
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
@SpringBootApplication
@EnableEurekaClient
public class ConsumerMain80 {
public static void main(String[] args) {
SpringApplication.run(ConsumerMain80.class,args);
}
}
server:
port: 80
eureka:
client:
service-url:
#指定需要做负载均衡的注册中心地址
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
register-with-eureka: false
3.消费方通过微服务名称去调用服务(这里需要注意的的是因为RestTemplate上加了@LoadBalanced注解,所以原来的通过ip:端口的普通调用方式就失效了)
@RequestMapping(method = RequestMethod.GET,value = "dept2")
/*通过微服务名称(等价ip+端口)访问服务*/
public Dept findOne2(){
return restTemplate.getForObject("http://DEPT-PROVIDER-8001/dept",Dept.class);
}
4.模拟多个相同服务(所在机器不同)注册到注册中心。这里是实现Ribbon的效果的关键步骤,容易忘记。
新建几个相同的服务提供者
2.修改yml文件中的instance-id.但是application-name必须保持一致
第三个工程也是做以上改动,这里就省略贴图了。
改完之后再访问注册中心管理界面可以看到一个服务有三个提供者
3.测试,消费者多次调用同一个接口(Ribbon负载均衡默认的是轮询)可以看到多次访问来自不同的后端