Java负载均衡是什么?
将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上执行
服务端:服务提供端,比如nginx负载均衡
客户端:服务请求方,在发送请求之前已经选好了由哪个实例处理请求。
Spring Cloud Ribbon 是 Netflix Ribbon 实现的一套客户端 负载均衡工具
ribbon:Ribbon是Netflix开发客户端负载均衡器,基于某种负载均衡服务消费者去请求提供者。
springcloud提供负载均衡的组件,用注解来完成
定义:负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外供应效力而无须其他服务器的辅助。经过某种负载分管技术,将外部发送来的央求均匀分配到对称结构中的某一台服务器上,而接收到央求的服务器独登时回应客户的央求。均衡负载可以平均分配客户央求到服务器列阵,籍此供应快速获取重要数据,解决很多并发访问效力问题。这种群集技术可以用最少的出资取得接近于大型主机的性能。
Ribbon 本地负载均衡客户端 VS Nginx 服务端负载均衡区别
Nginx 是服务器负载均衡,客户端所有请求都会交给nginx, 然后 nginx 实现转发请求。即负载均衡是由服务端实现的。 Ribbon 本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息服务列表后缓存到JVM 本地,从而在本地实现RPC远程 服务调用技术。
下面进行实战
1、测试结果
第一个服务请求了五次
第二个服务请求了三次
这就是负载均衡,还可以继续增加服务
2、两个生产者,这里只是有两个启动类达到生成者的目的,其他和正常服务差不多,没有什么特殊之处,重点看消费者
1 NacosProviderController
@RestController @Slf4j public class NacosProviderController { @GetMapping("/provider") public String provider() { System.out.println("==================hello"); return "(provider invoke这里是提供者提供资源)-" + now(); } }
2 NacosProviderApplication
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication.class, args); } }
3 NacosProviderApplication2
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class NacosProviderApplication2 { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication2.class, args); } }
4 application.yml
server: port: 8086 spring: application: name: nacos-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 logging: level: root: info org.springframework: info
5 pom.xml
<?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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cn.nacos.provider</groupId> <artifactId>nacos-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <name>nacos-provider</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <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> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!--nacos依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.0.1.RELEASE</version> </dependency> <!--openfeign依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3、消费者
先看看核心代码