SpringCloud--路由Zuul的使用和基本流程解析

xl_echo编辑整理,欢迎转载,转载请声明文章来源。更多IT编程案例、资料请联系QQ:1280023003 ,群:298140694
百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!


路由顾名思义那是一个帮助我们能够快速寻找到我们需要服务的组件,在springcloud中,路由主要用于和ribbon工作作用,实现负载均衡。其主要作用就是转发和过滤,也是微服务一个不可缺少的部分。

本章主要讲解路由的功能,过滤我们后续再进行讲解。

首先创建一个普通的springboot工程,目录如下:
这里写图片描述

然后在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.echo.demo</groupId>
    <artifactId>demo_zuul</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>service-zuul</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.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>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
        <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>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</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>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

基本依赖加入了之后,创建一个主类在主类上加入@EnableZuulProxy。具体如下

package com.echo.demo;

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;

/**
 * @Author xl_echo
 * @Date 2018/6/17 上午10:44
 **/
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ServiceZuulApplication {

  public static void main(String[] args) {
    SpringApplication.run(ServiceZuulApplication.class, args);
  }

}

然后创建一个配置文件,这个很关键,主要路径的配置决定了访问的方式。先看配置文件怎么写

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:10080/eureka/
server:
  port: 10089
spring:
  application:
    name: service-zuul
zuul:
  routes:
    api-a:
      path: /api-a/**
      serviceId: service-ribbon
    api-b:
      path: /api-b/**
      serviceId: service-feign

zuul上面的是固定配置,下面跟着的内容就是我们要重点关注的。
path后面所跟的是我们需要访问路径。
serviceId所表示的是我们的服务消费者在注册中心注册的名字,这里一定不能错,如果对应不上就无法访问。

以上工作做好之后就可以一次启动相关服务了,然后通过路由访问,可以看到和我们之前通过服务消费者访问时一样的。
这里写图片描述

当我们在访问api-a的时候,我们会发现,我们真是的访问是通过ribbon来访问的,该请求相当于就是分发给了ribbon工程。如果我们使用了api-b来访问,那么就可以看到请求是分发给了feign。当然建议最好在ribbon工程中对返回值进行加工,在feign中也一样,不然无法区别,因为服务提供者这有一个,所以我们需要进行区分,这里就不演示了。

猜你喜欢

转载自blog.csdn.net/xlecho/article/details/80717443