文章实例使用的Spring Cloud版本为Finchley.SR1,Spring Boot版本为2.0.4。
1 Spring Cloud Ribbon
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模板请求自动转换成客户端负载均衡的服务调用。
RestTemplate是Spring实现的一个对HTTP请求封装处理的类,它简化了与HTTP服务器的通信,并遵循了RESTful原则。在Spring Cloud应用中,它可以结合Ribbon,创建一个具有负载均衡作用的RestTemplate,用于服务消费。
2 实例
2.1 创建Spring Boot应用,引入相关依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2 application.properties指定注册中心
spring.application.name=ribbon-consumer
server.port=3001
#项目信息
info.name=${spring.application.name}
info.server.ip-address=${spring.cloud.client.ip-address}
info.server.port=${server.port}
#实例默认通过使用域名形式注册到注册中心:false
eureka.instance.prefer-ip-address=true
#实例名
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://peer2:1002/eureka/,http://peer2:1003/eureka/
2.3 创建一个具有负载均衡作用的RestTemplate
@SpringCloudApplication
public class RibbonConsumerApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
2.4 使用RestTemplate进行服务的调用
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/ribbon-consumer/hello")
public String comsume(){
//调用EUREKA-CLIENT提供的服务
return restTemplate.getForObject("http://EUREKA-CLIENT/hello",String.class);
}
}
2.4 启动应用
访问http://localhost:3001/ribbon-consumer/hello,可以到应用成功调用了EUREKA-CLIENT的服务。