Java后端爱上SpringCloud 第一节:内部负载均衡 Ribbon和Feign
PS:为什么说是内部负载均衡?因为Ribbon和Feign都是在SpringClodu服务间的调用做的,之后会讲到在外部请求做负载均衡。至于负载均衡是啥,大家可以自行搜索一下,老规矩先贴一些连接,让大家明确概念,在进行实现。
这里先简单的贴一下负载均衡的概念:
负载均衡:英文名称为Load Balance, 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
一些链接
- 微服务之间的调用(Ribbon与Feign)
- Spring Cloud 客服端负载均衡 Ribbon
- 轻松搞定SpringCloud微服务-负载均衡Ribbon
- git上feign的项目
- git上ribbon的项目
- 详解 RestTemplate 操作
Ribbon和Feign的区别和比较
Ribbon | Feign |
---|---|
软负载 | 软负载 |
支持TCP,HTTP,UPU | 支持HTTP |
支持容错 | 支持容错 |
和RestTemplate结合起来实现负载均衡 | 简单的HTTP生命调用 |
当前架构
之前有个工程起名为spring-first,太low了,我把它改名为My-Cloud-First虽然也很low。贴一下现在的架构图:
下面开始实现正题。
创建My-Spring-Ribbon
创建一个My-Spring-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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.hyn</groupId>
<artifactId>My-Spring-Ribbon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>My-Spring-Ribbon</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RC1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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-eureka-server</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