通过Ribbon实现负载均衡
说明
项目对应git 地址—> gitee
承接上一篇 eureka 级群搭建好了之后使用 —> eureka级群搭建
Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具
使用
在消费者端,通过简单的注解即可开启,非常方便
代码说明
- pom.xml
<!--Ribbon相关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/springcloud-starter-ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- applicaation.yml
server:
port: 80
#Eureka 配置
eureka:
client:
register-with-eureka: false # false 表示不向注册中心注册自己
service-url:
# defaultZone这个千万别打错了
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
- 配置文件,配置RestTemolate, 加上 @LoadBalanced
@Configuration
public class ConfigBean {
@Bean
@LoadBalanced // 重点。别忘记加!
public RestTemplate getResTemplate(){
return new RestTemplate();
}
}
- 启动类
@SpringBootApplication
@EnableEurekaClient // 开启
public class DeptConsumerRibbon80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumerRibbon80.class,args);
}
}
- 访问调用
之前是通过端口地址访问,配置好之后,就可以通过服务名字调用了,服务名就是spring.application.name。
// 单机
// private static final String REST_URL_PREFIX = "http://localhost:8001";
// 搭好级群之后,整合ribbon,可直接使用服务名字
private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
// 方法举例
@RequestMapping("/consumer/dept/list")
public List list() {
System.out.println(REST_URL_PREFIX + "/dept/list");
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
}
测试
可以将一个服务写三份,分三个端口启动,注册服务名相同,调用不同的数据加以区分。
经过测试,ribbon默认是按照服务注册的顺序去分配消费者每次访问所调用的服务。