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


相关推荐
半夜修仙12 分钟前
Spring集成邮箱功能
java·开发语言·spring boot·spring·rabbitmq·github·maven
宠友信息23 分钟前
从重复请求到订单同步看内容社区源码的处理思路
java·spring boot·redis·后端·mysql·spring
阿维的博客日记11 小时前
MultipartFile 是不是表示仅仅是一个分片?
java·后端·spring·multipartfile
一路向北North12 小时前
Spring Security OAuth2.0(23):分布式系统授权-转发明文给微服务
java·spring·微服务
专注_每天进步一点点13 小时前
SLB(绑定弹性公网ip)-gateway-业务pod,gateway上出现reset by peer,业务pod上没有reset by peer
服务器·tcp/ip·gateway
乐观的Terry15 小时前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
weixin_7275356217 小时前
Spring @Transactional 事务失效:原理层面深度解析
java·spring
没钥匙的锁118 小时前
16-Java反射机制:Spring IOC背后的核心技术
java·开发语言·spring
春卷同学19 小时前
HarmonyOS掌上记账APP开发实践第23篇:弹性动效与手势 — EdgeEffect.Spring 与手势系统实战
spring·华为·harmonyos
大不点wow1 天前
Spring 中 @Bean、@Component 与 @Configuration 的作用及底层逻辑
java·spring