zoukankan      html  css  js  c++  java
  • Spring Cloud负载均衡:使用zuul作服务器端负载均衡

    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: 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-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: 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-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: 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-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列表,即可实现任意的负载均衡(不再贴效果图),优缺点和上面相反。

  • 相关阅读:
    Winform中怎样去掉TextBox输入回车时的警告音
    sql server 2000 出现不能执行查询,因为一些文件丢失或未注册”
    c# winform 创建文件,把值写入文件,读取文件里的值,修改文件的值,对文件的创建,写入,修改
    <metro>PlayToReceiver class
    <metro>PlayToReceiver
    <C#>怎样学好Winform
    <C#>怎样学好winform3
    <C#>怎样学好winform4
    <metro>Application Data
    <metro>UI
  • 原文地址:https://www.cnblogs.com/jizhong/p/11431554.html
Copyright © 2011-2022 走看看