1.简介
Ribbon是一个基于Http和TCP的负载均衡工具。
2.环境搭建
在前一节的基础上启动18011注册中心,和18012、18013的两个服务
在eureka-client写一个接口,便于测试
3. 搭建一个服务消费者
右击项目根目录,New--Module--选择左侧的Maven,点击next--输入新模块的名字custom-ribbon,
pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.klose</groupId>
<artifactId>springcloud-study</artifactId>
<version>0.0.1-SNAPSHOT</version> <!-- lookup parent from repository -->
</parent>
<groupId>com.klose</groupId>
<artifactId>custom-ribbon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>custom-ribbon</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件:
#当前项目要被部署的端口
server:
port: 18014
#当前ribbon项目注册到下面配置的注册中心中
eureka:
client:
serviceUrl:
defaultZone: http://localhost:18011/eureka/
#当前项目名
spring:
application:
name: custom-ribbon
启动类:
@EnableEurekaClient表明这是一个服务提供者
@EnableDiscoveryClient表示向服务中心注册
@LoadBalanced表明RestTemplate工具类将会负载均衡
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class CustomRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(CustomRibbonApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
测试服务接口:
eureka-client是注册中心上服务的name
@RestController
public class HelloController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/hello")
public String getPort(String name){
return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
}
}
启动ribbon并测试负载均衡
在浏览器上输入http://localhost:18014/hello?name=klose
说明发送给18014端口的请求,被分发到eureka-client项目。且分别交替发给部署在18012与18013的服务器。
此时的架构: