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;
    }
}


相关推荐
Mr.朱鹏4 小时前
针对Feign客户端请求体参数处理问题
java·jvm·spring boot·spring·spring cloud·maven·intellij-idea
涛粒子6 小时前
Spring Bean 生命周期的执行流程
java·后端·spring
quo-te8 小时前
【无标题】
java·spring·maven·mybatis·idea
_周游8 小时前
【Spring+MyBatis】_图书管理系统(上篇)
spring·oracle·mybatis
Xwzzz_10 小时前
Spring Cloud Gateway中断言路由和过滤器的使用
java·spring cloud·gateway
zzyh12345610 小时前
springcloudalibaba组件gateway
前端·javascript·gateway
@明明不知道10 小时前
spring cloud 微服务部署(2025年)第一章:Nacos、LoadBalancer、GateWay、Ribbon集成之Nacos部署
spring cloud·微服务·nacos·gateway·loadbalancer
大龄码农有梦想12 小时前
Springboot集成Spring AI和Milvus,验证RAG构建过程
人工智能·spring boot·spring·milvus·知识库·rag·spring ai
caihuayuan416 小时前
mysql多主集群 galera cluster for mysql 8安装配置启动重启集群
java·大数据·sql·spring
程序猿零零漆16 小时前
SpringCloud系列教程:微服务的未来(二十四)Direct交换机、Topic交换机、声明队列交换机
spring·spring cloud·微服务·rabbitmq