搭建gateway路由模块

上次搭建了一个eureka注册中心,也搭建其他的模块注册到中心去
搭建业务模块地址

简介

Sprincloud组件可以用Gateway或者zuul,最早使用的是Zuul,后面Spring自己出了Gateway

网关的主要功能

1.限流(流量控制)
2.重试(请求失败时重试,慎用)
3.跨域(前后端不在一个域)
4.路由(转发请求)
5.鉴权(登录校验,签名校验)等

开始搭建

步骤
     1.新建一个gateway模块
     2.在pom中加入依赖
     4.新建启动类
     4.在application.properties注册进去
     5.修改下日志文件

新建一个普通的maven项目,取名为gateway,或者其他名字,建议见名知意
依赖

<!-- gateway依赖 -->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-gateway</artifactId>
 </dependency>
 <!-- 因为需要把网关注册到注册中心去 -->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>

启动类

package club.adger.gateway;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.core.env.Environment;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: Adger
 * @Date: 2020/07/22/20:08
 */
@SpringBootApplication
@EnableEurekaClient
public class GatewayApplication {
    
    
    private static final Logger LOG = LoggerFactory.getLogger(GatewayApplication.class);
    public static void main(String[] args) {
    
    
        SpringApplication app = new SpringApplication(GatewayApplication.class);
        Environment env = app.run(args).getEnvironment();
        LOG.info("启动成功!!");
        LOG.info("Gateway地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));
    }
}

application.properties

# 应用名字
spring.application.name=gateway
# 因为是路由模块比较重要 其他模块 按照 8001 8002 这样排下去
server.port=8000
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
    修改一下路径 value 是日志输出的路径 不要使用绝对路径,不是每个电脑又D盘F盘什么的 日志输出根据你的项目路径输出的
    如果你使用的时windows 就比如你的项目在 D盘 你的日志文件输出就在D盘开始
    -->
    <property name="PATH" value="/log/cource/gateway"></property>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--打印 年月日 时分秒%d{yyyy-MM-dd HH:mm:ss.SSS} 高亮显示 %highlight(%-5level) 控制台颜色 %blue(%-50logger{50}:%-4line) 日志信息 %msg%n</Pattern>-->
            <Pattern>%d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %msg%n</Pattern>
        </encoder>
    </appender>

    <!-- 输出级别 TRACE_FILE 输出到文件里面去 -->
    <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${PATH}/trace.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern>
        </layout>
    </appender>

    <!-- 错误级别 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${PATH}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <root level="ERROR">
        <appender-ref ref="ERROR_FILE" />
    </root>

    <root level="TRACE">
        <appender-ref ref="TRACE_FILE" />
    </root>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

启动发现成功
在这里插入图片描述

配置路由转发

单配置一个gateway没有什么作用 在application.properties配置文件中配置

# 应用名字
spring.application.name=gateway
# 因为是路由模块比较重要 其他模块 按照 8001 8002 这样排下去
server.port=8000
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

# 路由转发 这是一种固定的配置 第一个是转发到哪个模块的地址
spring.cloud.gateway.routes[0].id=system
# 地址
spring.cloud.gateway.routes[0].uri=http://127.0.0.1:8001
# 路由路径配置 只要是 带 /system 的就转发到这个地址上面去
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/**

# 如果是多个路由转发 这样排下去 routes[2] 等
#spring.cloud.gateway.routes[1].id=system
#spring.cloud.gateway.routes[1].uri=http://127.0.0.1:8001
#spring.cloud.gateway.routes[1].predicates[0].name=Path
#spring.cloud.gateway.routes[1].predicates[0].args[0]=/system/**

在业务模块写上控制层测试类

package club.adger.system.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: Adger
 * @Date: 2020/07/22/20:31
 * @RestController 像Restul 风格API的请求
 */
@RestController
public class Test {
    
    
    @RequestMapping("/test")
    public String test(){
    
    
        return "test";
    }
}

在这里插入图片描述
访问测试
在这里插入图片描述
在配置路由转发的时候路径写的是system路径,我们可以加上@RequestMapping("/system")这样写,但是我是在配置文件中配置的
业务模块配置文件的改动

# 应用名字
spring.application.name=system
# 路劲配置 必须 / 开头 不能 / 结尾
server.servlet.context-path=/system
server.port=8001
# 指向注册中心的地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

然后重启所有服务,看路由配置有没有成功
发现本身的系统模块成功 8001端口为业务模块端口
在这里插入图片描述
发现转发成功 8000端口
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45004361/article/details/107481386