Spring Cloud服务消费者

Ribbon

Ribbon是一个基于HTTP和TCP的客户端负载均衡器。
Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用。

1.启动之前的spring-could
2.启动服务提供方spring-cloud-provide

修改spring-cloud-provide中的server-port为2223,再启动一个服务提供方:service

使用Ribbon实现客户端负载均衡的消费者

在pom.xml中添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

在应用主类中,通过@EnableDiscoveryClient注解来添加发现服务能力。
创建RestTemplate实例,并通过@LoadBalanced注解开启均衡负载能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@SpringBootApplication
@EnableDiscoveryClient
public class RibbonApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}

创建ConsumerController来消费COMPUTE-SERVICE的add服务。
通过直接RestTemplate来调用服务,计算10 + 20的值。

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add() {
return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody();
}
}

application.properties中配置eureka服务注册中心

1
2
3
4
spring.application.name=ribbon-consumer
server.port=3333
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

然后启动该项目,在浏览器中输入http://localhost:3333/add
在2222和2223的端口总能看到有其中一个控制台有日志打出,关闭一个,还能继续运行
即通过ribbon实现了负载均衡了。