1.目的:

本文简述Spring Cloud负载均衡之服务器负载均衡模式,使用组件为zuul。

zuul作为Spring Cloud中的网关组件,负责路由转发、身份验证、请求过滤等等功能,那么我们可以利用其路由转发功能,实现负载均衡中的服务器负载均衡这一模式。

2.所需组件:

client组件(client1,client2,client4代码相同,只是运行端口不同):

client1,端口8001,appname:AUTH-SERVICE

client2,端口8002,appname:AUTH-SERVICE

client4,端口8004,appname:AUTH-SERVICE1(用于验证相同路由路径,不同serviceId情况)

client组件均为spring boot组件,注册到eureka上,结果如下图所示:

zuul组件正确的配置文件如下:

 <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-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

3.详细配置 

zuul使用eureka负载均衡

server:
port:
eureka:
instance:
prefer-ip-address: true
hostname: localhost
client:
service-url:
defaultZone: http://admin:123456@localhost:8888/eureka/
spring:
application:
name: GATE-WAY
path:
zuul:
host:
connect-timeout-millis:
socket-timeout-millis:
routes:
AUTH-SERVICE:
path: /index/**
serviceId: AUTH-SERVICE
stripPrefix: false
#AUTH-SERVICE:
# ribbon:
# listOfServers: http://localhost:8001,http://localhost:8002

启动类的配置如下:

@EnableDiscoveryClient
@EnableZuulProxy
@SpringBootApplication
public class ZuullApplication { public static void main(String[] args) {
SpringApplication.run(ZuullApplication.class, args);
} }

配置完成后,访问http://localhost:8003/index/hello,即可见如下结果:

此时,如果将配置信息修改为:

server:
port:
eureka:
instance:
prefer-ip-address: true
hostname: localhost
client:
service-url:
defaultZone: http://admin:123456@localhost:8888/eureka/
spring:
application:
name: GATE-WAY
path:
zuul:
host:
connect-timeout-millis:
socket-timeout-millis:
routes:
AUTH-SERVICE11:
path: /index/**
serviceId: AUTH-SERVICE
stripPrefix: false

即将routes的名称修改一下,所得结果与上面一致,说明可以任意命名路由名称。

如果去掉:stripPrefix: false配置,则需要在路径中添加对应的path前缀,即可实现与上面一样的调用结果。

再将配置信息修改如下:

server:
port: 8003
eureka:
instance:
prefer-ip-address: true
hostname: localhost
client:
service-url:
defaultZone: http://admin:123456@localhost:8888/eureka/
spring:
application:
name: GATE-WAY
path:
zuul:
host:
connect-timeout-millis: 5000
socket-timeout-millis: 20000
routes:
AUTH-SERVICE:
path: /index/**
serviceId: AUTH-SERVICE
stripPrefix: false
AUTH-SERVICE1:
path: /index/**
serviceId: AUTH-SERVICE1
stripPrefix: false
#AUTH-SERVICE:
# ribbon:
# listOfServers: http://localhost:8001,http://localhost:8002
#ribbon:
# eureka:
# enabled: false

即再添加serviceId为AUTH-SERVICE1路由规则,则结果如下:

说明在相同的路由规则下,如果同一个路径有多个serviceId,则前面的serviceId配置会被覆盖,最后一个serviceId起作用。

zuul独立负载均衡

让zuul自己管理负载均衡,则需要添加:ribbon.eureka.enabled: false配置,详细配置代码如下:

server:
port:
eureka:
instance:
prefer-ip-address: true
hostname: localhost
client:
service-url:
defaultZone: http://admin:123456@localhost:8888/eureka/
spring:
application:
name: GATE-WAY
path: zuul:
host:
connect-timeout-millis:
socket-timeout-millis:
routes:
AUTH-SERVICE:
path: /index/**
serviceId: AUTH-SERVICE111
stripPrefix: false
AUTH-SERVICE111:
ribbon:
listOfServers: http://localhost:8001,http://localhost:8002,http://localhost:8004
ribbon:
eureka:
enabled: false

总结:

使用zuul组件进行负载均衡,分2种情况,其一是使用eureka组件本身维护的配置,核心在于以serviceId为一组,按默认策略(轮询)进行负载均衡,此时只需要配置路径即可,优点是配置简单省事,缺点是灵活性不强,不方便自定义调用的服务提供者列表。

如果让zuul自己管理负载均衡,则要灵活得多,主要体现在:serviceId可以任意命名,不用考虑是否在eureka中存在,另外,自己维护listOfServers列表,即可实现任意的负载均衡(不再贴效果图),优缺点和上面相反。

Spring Cloud负载均衡:使用zuul作服务器端负载均衡的更多相关文章

  1. Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制

    上一篇文章单独介绍了Ribbon框架的使用,及其如何实现客户端对服务访问的负载均衡,但只是单独从Ribbon框架实现,没有涉及spring cloud.本文着力介绍Ribbon的负载均衡机制,下一篇文 ...

  2. Spring Cloud 系列之 Netflix Zuul 服务网关

    什么是 Zuul Zuul 是从设备和网站到应用程序后端的所有请求的前门.作为边缘服务应用程序,Zuul 旨在实现动态路由,监视,弹性和安全性.Zuul 包含了对请求的路由和过滤两个最主要的功能. Z ...

  3. SPRING CLOUD服务网关之ZUUL

    服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...

  4. spring cloud 2.x版本 Zuul路由网关教程

    前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...

  5. spring boot 2.0.3+spring cloud (Finchley)2、搭建负载均衡Ribbon (Eureka+Ribbon+RestTemplate)

    Ribbon是Netflix公司开源的一个负载均衡组件,将负载均衡逻辑封装在客户端中,运行在客户端的进程里. 本例子是在搭建好eureka的基础上进行的,可参考spring boot 2.0.3+sp ...

  6. spring cloud学习(三)使用Ribbon实现客户端负载均衡

    使用Ribbon实现客户端的负载均衡 * 个人博客空间 : https://zggdczfr.cn/ * Ribbon Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组 ...

  7. 一起来学Spring Cloud | 第三章:服务消费者 (负载均衡Ribbon)

    一.负载均衡的简介: 负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器,多服务器能够消除单个服务器的故障,减轻单个服务器的访问压力. 1.服务端负载均衡 ...

  8. Spring Cloud(十四):Ribbon实现客户端负载均衡及其实现原理介绍

    年后到现在一直很忙,都没什么时间记录东西了,其实之前工作中积累了很多知识点,一直都堆在备忘录里,只是因为近几个月经历了一些事情,没有太多的经历来写了,但是一些重要的东西,我还是希望能坚持记录下来.正好 ...

  9. spring cloud学习笔记三 Feign与Ribbon负载均衡的区别

    一.Feign的介绍 Feign一般比较书面的解释是:Feign是一个声明式的WebService客户端,使用Feign编写的WebService客户端更加简单,他的使用方法是定义一个接口,然后在上线 ...

随机推荐

  1. Woobuntu

    Wooyun + Ubuntu = Woobuntu Woobuntu是基于Ubuntu系统的一款安全研究环境配置工具,可以自动安装并配置众多的安全工具与依赖环境,此外还针对中国用户的习惯进行了一些优 ...

  2. deep_learning_Function_softmax_cross_entropy_with_logits

    [TensorFlow]tf.nn.softmax_cross_entropy_with_logits的用法 [TensorFlow]tf.nn.softmax_cross_entropy_with_ ...

  3. windows开启ftp服务

    1.启动或关闭windows-->internet information services-->ftp服务器   选中 2.此电脑右键-->管理-->服务和应用程序--> ...

  4. node.js启动服务,不依赖第三方

    好好学习,天天向上,懒惰.颓废让我越来越糟糕,所以分享一下,共同学习 纯node.js搭建一个小服务,下图为文件目录结构,很简单,很小 log文件是自动生成的 index.js文件 const url ...

  5. Luogu P4171 [JSOI2010]满汉全席 2-sat

    终于搞懂了\(2-sat\).实际上是个挺简单的东西,像网络流一样关键在于建模. 问题:\(n\)个数\(A\),可以选择\(0\)和\(1\),现在给你\(m\)组条件\(A\),\(B\),对每个 ...

  6. Java-Web servlet控制器的引入

    一.建包 二.建立实体类 参考二维表,考虑各个字段的名字.类型 private String id; private String name; private String address; publ ...

  7. Python&R:警告信息管理

    计算机程序有时很人性化,比如给你警告提示信息: 计算机程序有时又非常不人性化,比如动不动就给你警告提示...... 如果你的程序是要给客户使用,有运行美化要求: 再尤其是比如警告出现在循环里的情况,那 ...

  8. Centos7——docker持久化存储和卷间状态共享(笔记)

    docker持久化存储和卷间状态共享(笔记)  本章介绍 存储卷的介绍 存储卷的两种类型 宿主机好额容器之间如何共享数据 容器之间如何共享数据 存储卷的声明周期 存储卷之间的数据管理和控制模式 就像在 ...

  9. 30 最小n个数

    public class test30{ public static void main(String args[]){ int array[]={3,2,5,1,4}; int temp[] = f ...

  10. 基于nc命令监控服务端口的Shell脚本

    Shell代码: #!/bin/bash export LANG=en_US.UTF- #IP Address=127.0.0.1 #Port Port= #尝试的次数 n= #nc timeout, ...