Ribbon简介
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。
在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。下图展示了Ribbon与Eureka配合使用时的架构。
实现过程
我们修改microservice-student-consumer-80子模块项目
引入依赖
1 2 3 4 5 6 7 8 9 10 11 12
| <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>
|
修改application.yml
添加下面内容:
1 2 3 4 5
| eureka: client: register-with-eureka: false service-url: defaultZone: http://eureka2001.ledao.com:2001/eureka/,http://eureka2002.ledao.com:2002/eureka/,http://eureka2003.ledao.com:2003/eureka/
|
添加@LoadBalanced注解
SpringCloudConfig.java的getRestTemplate()方法上添加@LoadBalanced注解(负载均衡配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.ledao.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate;
@Configuration public class SpringCloudConfig {
@Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
|
添加注解@EnableEurekaClient
因为和eureka整合,所以启动类StudentConsumerApplication_80 加个注解 @EnableEurekaClient
指定应用名称
在服务提供者microservice-student-provider-1001的application.yml以下配置(microservice-student为微服务应用名称)
1 2
| application: name: microservice-student
|
在spring配置下添加,完整spring配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| spring: application: name: microservice-student datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db_springcloud?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: 123456 jpa: hibernate: ddl-auto: update show-sql: true
|
修改PRE_HOST
修改服务消费者子模块项目的StudentConsumerController.java中的PRE_HOST为 http://MICROSERVICE-STUDENT
1
| private static final String PRE_HOST = "http://MICROSERVICE-STUDENT";
|
测试
依次运行microservice-eureka-server-2001、microservice-eureka-server-2002、microservice-eureka-server-2003、microservice-student-provider-1001、microservice-student-consumer-80子模块项目
浏览器地址栏输入:http://localhost/student/list ,出现下面结果说明调用服务成功(下面是格式化过的JSON串)