美文网首页
SpringCloud-5之-Zuul网关服务

SpringCloud-5之-Zuul网关服务

作者: 小螺丝钉cici | 来源:发表于2019-07-27 18:15 被阅读0次

使用Ribbon和SpringCloud实现客户端负载均衡-Zuul网关服务

1、介绍
Zuul是服务器端的负载均衡组件,能够对请求进行路由和过滤处理,主要对请求进行转发,根据相应的规则引擎转 发给后端的相应服务。

区别:
zuul:client 访问,gateway将请求转发给其他服务;服务器端负载均衡器
ribbon:对客户端的服务负载均衡

image.png image.png

2、创建book模块
2.1 编写pom.xml,普通的spring-boot框架

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cici</groupId>
    <artifactId>book</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>book</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.2 编写BookApplication类

@SpringBootApplication
@RestController
public class BookApplication {

    @RequestMapping("/available")
    public String available() {
        return "Spring in action";
    }
}

2.3 配置application.properties

spring.application.name=book
server.port=8090

3、创建gateway模块

image.png

3.1 编码pom.xml文件
复制官网demo的pom:
https://spring.io/guides/gs/routing-and-filtering/

image.png

3.2 编写GatewayApplication类

@SpringBootApplication
// 添加zuul代理注解
@EnableZuulProxy
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

3.3 编写application.properties

zuul.routes.books.url=http://localhost:8090
ribbon.eureka.enabled=false
server.port=8080

Spring cloud Zuul会自动设置路径到applicaiton name上。
由于我们设置了zuul.routes.books.url,Zuul将会代 理/books请求给该地址。
Zuul使用Ribbon来执行客户端负载均衡,并且默认Ribbon使用Eureka发现服务。
这里我们跳过服务发现,因此设 置ribbon.eureka.enabled为false。
因此,Ribbon现在不使用Eureka发现服务,必须手动指定一个BookService 的url。

3.4 创建ZuulFilter 过滤器是过滤请求的。zuul过滤器有四中过滤类型:
pre 路由请求前执行。
route 处理实际的路由请求。
post 在请求路由完成后执行。
error 处理请求期间出现错误执行。

package com.cici.gateway;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;

import javax.servlet.http.HttpServletRequest;

/**
 * 简单过虑器
 */
public class SimpleFilter extends ZuulFilter {
    /**
     * 前置过滤
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 过滤执行顺序
     */
    @Override
    public int filterOrder() {
        return 1;
    }

    /**
     * 是否执行过滤
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 包含过滤器功能
     */
    @Override
    public Object run() throws ZuulException {
        // 获得当前上下文,存放请求和状态信息
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String method = request.getMethod();
        String url = request.getRequestURL().toString();
        System.out.printf("%s request to %s\r\n", method, url);
        return null;
    }
}

3.5 修改GatewayApplication类

@SpringBootApplication
// 添加zuul代理注解
@EnableZuulProxy
public class GatewayApplication {
    /**
     * 引入Zuul过滤器到容器中
     */
    @Bean
    public SimpleFilter simpleFilter() {
        return new SimpleFilter();
    }

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

4、启动模块
4.1 启动book模块 http://localhost:8090/available

image.png

4.2 启动Gateway模块 http://localhost:8080/books/available

image.png image.png

请求的是8090的网关url。zuul直接进行路由,通过过滤器转发给8080服务
执行8080/book/available方法

相关文章

网友评论

      本文标题:SpringCloud-5之-Zuul网关服务

      本文链接:https://www.haomeiwen.com/subject/gbberctx.html