zoukankan      html  css  js  c++  java
  • 第四篇:Spring Cloud 网关路由 Zuul 负载均衡 & 验证集群状态

    1.zuul概述

    个人理解和nginx服务一样,起到了请求的转发效果。如下面代码

    http {
        server {
                server_name example.com;
     
                location /mail/ {
                        proxy_pass http://example.com:protmail/;
                }
     
                location /com/ {
                        proxy_pass http://example.com:portcom/main/;
                }
     
                location / {
                        proxy_pass http://example.com:portdefault;
                }
        }
    }

    2.创建zuul项目

    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>
    
        <groupId>com.cohesion</groupId>
        <artifactId>spring-cloud-zuul</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>spring-cloud-zuul</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
        </properties>
    
        <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-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>

    man方法

    package com.cohesion;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
    
    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy//开启zuul功能
    public class SpringCloudZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringCloudZuulApplication.class, args);
        }
    }

    配置文件

    server:
      port: 9000
    
    spring:
      application:
        name: service-zuul
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8080/eureka/
      
    zuul:
      routes:
        order:
          path: /order/**
          service-id: SERVICE-ORDER

    #所有以order开头的请求 都会转发到SERVICE-ORDER服务中

    在集群的文章中,Spring Cloud client服务集群

    为什么没有提现集群的特性,是因为集群特性需要从同一个入口进去,进去后利用心跳连接判断服务是否宕机,如果宕机则转发到ok的服务中。

    现在我们把网关路由zuul搭建起来,我们就可以从zuul统一入口去访问我们的服务。

    当然你也可以写个api项目,统一访问api项目,路由配置不配置转发服务功能。

    利用restRemplate去做负载均衡。【restRemplate】稍后会继续讲解

    现在我们来访问zuul项目,看看是否做了负载均衡 & 验证集群的可行性。

    现在我们每访问一次都会切换同一个服务的不同端口,证明负载均衡和集群已经生效。

    在nginx中还可以利用权重的机制,去指定 那个服务访问的次数多,那个服务访问的次数少。

    比如 A/B 服务器,访问10次,可能A服务器接受到的请求是8,而B服务器接受到的请求次数是2

    利用nginx的权重机就可以实现这个功能。

    权重机制衍变的背景可能是和服务器配置有关系,配置好的我就让他多干点事情,配置差的就让他少干点事情。

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/sz-jack/p/9378380.html
Copyright © 2011-2022 走看看