SpringCloud-Gateway

一、介绍

(1)网关服务

(2)功能:断言、路由、过滤

(3)能避免用户直接访问到业务主机

二、项目搭建

a、编写pom.xml(注意移除web框架,gateway中自带有)

java 复制代码
<?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">
    <parent>
        <artifactId>demo20220821</artifactId>
        <groupId>com.wsh.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-gateway-gateway9527</artifactId>
    <dependencies>
        <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>
        <dependency>
            <groupId>com.wsh.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

b、编写application.yml

java 复制代码
server:
  port: 9527

spring:
  application:
    name: cloud-gateway-service

eureka:
  client:
    #    客户端设置为true
    register-with-eureka: true
    #    客户端设置为true
    fetch-registry: true
    service-url:
      #      defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka1.com:7001/eureka, http://eureka2.com:7002/eureka
  instance:
    instance-id: gateway9527
    prefer-ip-address: true

c、编写启动类

java 复制代码
package com.wsh.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * @ClassName PaymentMain8002
 * @Description: TODO
 * @Author wshaha
 * @Date 2022/8/23
 * @Version V1.0
 **/
@EnableEurekaClient
@SpringBootApplication
public class GatewayMain8002 {
    public static void main(String[] args) {
        SpringApplication.run(GatewayMain8002.class, args);
    }
}

d、application.yml增加路由配置

java 复制代码
server:
  port: 9527

spring:
  application:
    name: cloud-gateway-service
  cloud:
    gateway:
      routes:
        - id: r1
          uri: http://localhost:8001
          predicates:
            - Path=/payment/test/**

eureka:
  client:
    #    客户端设置为true
    register-with-eureka: true
    #    客户端设置为true
    fetch-registry: true
    service-url:
      #      defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka1.com:7001/eureka, http://eureka2.com:7002/eureka
  instance:
    instance-id: gateway9527
    prefer-ip-address: true

e、运行

(4)路由开启支持负载均衡

java 复制代码
server:
  port: 9527

spring:
  application:
    name: cloud-gateway-service
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true #开启使用微服务名路由
      routes:
        - id: r1
          uri: lb://CLOUD-PAYMENT-SERVICE
          predicates:
            - Path=/payment/test/**

eureka:
  client:
    #    客户端设置为true
    register-with-eureka: true
    #    客户端设置为true
    fetch-registry: true
    service-url:
      #      defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka1.com:7001/eureka, http://eureka2.com:7002/eureka
  instance:
    instance-id: gateway9527
    prefer-ip-address: true


三、断言配置


四、过滤

(1)

(2)自定义

java 复制代码
package com.wsh.springcloud.config;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * @ClassName FiltersConfig
 * @Description: TODO
 * @Author wshaha
 * @Date 2023/10/14
 * @Version V1.0
 **/
@Component
public class FiltersConfig implements GlobalFilter, Ordered {


    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();
        queryParams.entrySet().stream()
                .forEach(item -> {
                    System.out.println(item.getKey() + "-" + item.getValue());
                });
        return exchange.getResponse().setComplete();//结束
//        return chain.filter(exchange); //进入下一个过滤器
    }

    @Override
    public int getOrder() {
        return 0;
    }
}


相关推荐
一定要AK5 小时前
Spring 入门核心笔记
java·笔记·spring
凯尔萨厮5 小时前
创建SpringWeb项目(Spring2.0)
spring·mvc·mybatis
木子欢儿7 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y7 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
鬼先生_sir7 小时前
Spring Cloud 微服务监控实战:SkyWalking + Prometheus+Grafana 全栈解决方案
运维·spring cloud·grafana·prometheus·skywalking
戮戮9 小时前
Spring Cloud Gateway 零拷贝参数校验:一种高性能网关架构实践
java·网络·架构·gateway
凯尔萨厮10 小时前
Spring学习笔记(基于配置文件)
spring
bobasyu10 小时前
Claude Code 源码笔记 -- queryLoop
java·笔记·spring
计算机学姐10 小时前
基于SpringBoot的高校竞赛管理系统
java·spring boot·后端·spring·信息可视化·tomcat·mybatis
文慧的科技江湖11 小时前
光储充协同的终极闭环:用SpringCloud微服务打造“发-储-充-用“智能能源网络 - 慧知开源充电桩管理平台
java·开发语言·spring cloud·微服务·能源·充电桩开源平台·慧知重卡开源充电桩平台