什么是Ribbon?
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们很轻松的将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然是一个工具类框架,但是它不需要想注册中心、配置中心、API网关那样独立部署,它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。微服务之间的调用、API转发等都是通过Ribbon实现的,包括Feign,也是基于Ribbon实现的。
负载均衡
负载均衡在系统架构是一个非常重要的部分,负载均衡是对系统的高可用、网络压力的缓解和护理能力的扩容的一个重要手段之一。我们平常说的负载均衡指的是服务端负载均衡,其中分为两个部分,软件负载均衡和硬件负载均衡。硬件负载均衡主要通过服务器之间的节点安装专门用户负载均衡的设备,例如:F5。而软件负载均衡则是通过在服务器上安装一些用于负载均衡的软件来完成分发工作,例如:Nginx等。
如何在项目中加入Ribbon
首先我们创建一个服务消费者的服务,然后在这个服务通过负载均衡的方式去调用user服务。
在pom.xml中的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-ribbon</artifactId>
</dependency>
</dependencies>
apiilcatioon.yml配置
#配置服务端口
server:
port: 8901
#服务名称
spring:
application:
name: test-ribbon
eureka:
client:
service-url:
#配置注册中心地址
defaultZone: http://peer1:8081/eureka
启动类
/**
* Ribbon测试服务启动入口
*
* @author Aaron
* @date 2020/1/1 16:37
*/
@EnableDiscoveryClient
@SpringBootApplication
public class TestRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(TestRibbonApplication.class, args);
}
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}
@LoadBalanced注解:表示开启负载均衡,详情需要查阅源码以及百度
RestTemplate.class:是Spring提供的一种访问Rest服务的客户端,RestTemplate提供了多种便捷访问HTTP服务的方法。能够大大的提供开发效率。
RestTemplate使用方法参考:https://www.cnblogs.com/longfurcat/p/10657251.html
TestController.java
/**
* 测试接口
*
* @author Aaron
* @date 2020/1/1 16:51
*/
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
/**
* 自我介绍负载均衡测试
*
* @author: Aaron
* @date: 2020/1/1 16:54
* @param: [name]
* @description:
* @return: java.lang.String
*/
@GetMapping("/test")
public String selfIntroduction(@RequestParam("name") String name) {
return restTemplate.getForEntity("http://SERVER-USER/user/self?name=" + name, String.class).getBody();
}
}
其中,SERVER-USER对应的是你在Eureka中注册的服务名,也就是你在applicatio.yml中配置的服务名称。
测试步骤:
1.启动注册中心
2.然后打包服务提供者,也就是SERVER-USER,因为需要启动两个用于测试负载均衡,所以需要配置不同的端口,然后进行部署。
3.启动服务消费者TEST-RIBBON服务
4.访问http://localhost:8001/test?name=Aaron,查看两个服务的日志
我们会看到两个服务的提供者日志是交替出现的,因为Ribbon默认是通过轮询的方式进而实现负载均衡。