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. Delphi RadioGroup 组件

  2. 2.flask模板--jinja2

    1.jinja2模板介绍和查找路径 import os from flask import Flask, render_template # 之前提到过在渲染模板的时候,默认会从项目根目录下的temp ...

  3. Windows 10安装Python 2.7和MySQL-python

    1. 安装Python Download Python 2. 安装MySQL-python pip install wheel (应该是可选) pip install mysqlclient==1.3 ...

  4. python分别获取虚拟网卡和真实网卡ip

    #!/usr/bin/python # -*- coding: utf-8 -*- import commands import socket import fcntl import struct C ...

  5. [牛客] [# 1108 E] Grid

    2019牛客国庆集训派对day3 链接:https://ac.nowcoder.com/acm/contest/1108/E来源:牛客网 题意 在一个$10 ^ 9 * 10 ^ 9$ 的方格中,每次 ...

  6. C++最快获取像素值

    HDC hdc, hdcTemp; RECT rect; BYTE* bitPointer; int x, y; int red, green, blue, alpha; while(true) { ...

  7. idea中使用JRebel插件

    首先 等待下载 点击Restart idea (重启idea) 然后等待idea 进行激活 记得勾选下面的那个复选框 激活url:http://139.199.89.239:1008/88414687 ...

  8. 乱花渐入迷人眼------从解决jqueryEasyUI上传插件提交ajax请求谈网页调试

    由于要给格斗男神写搏击俱乐部ERP系统,就要用到jquery Easyui插件规范数据和表单的录入,其中一项功能就是上传商品图片, 而且是在datagrid-detailview中使用filebox完 ...

  9. fiddler-重定向AutoResponder(三)

    关于Fiddler的AutoResponder重定向功能,主要是时进行会话的拦截,然后替换原始资源的功能. 它与手动修该reponse是一样的,只是更加方便了,可以创建相应的rules,适合批处理的重 ...

  10. SQLSERVER 连接常见问题

    1.从索引 0 处开始,初始化字符串的格式不符合规范 解决办法:检查数据库连接字符串 参考链接: https://www.cnblogs.com/guodongsky/archive/2013/04/ ...