首页 > 其他分享 >在Spring Boot中实现API网关与路由

在Spring Boot中实现API网关与路由

时间:2024-07-22 22:08:30浏览次数:12  
标签:网关 Spring Boot springframework cloud org import 路由

在Spring Boot中实现API网关与路由

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot中实现API网关与路由。API网关是一种用于管理和路由请求的中间层,它可以集中处理认证、路由、负载均衡、缓存等功能。Spring Cloud Gateway是Spring提供的一个功能强大的API网关解决方案。

一、Spring Cloud Gateway简介

Spring Cloud Gateway是一个非阻塞的API网关,它基于Spring WebFlux构建,支持动态路由、负载均衡、断路器等功能。它的核心功能包括:

  • 路由:将请求路由到目标服务。
  • 过滤器:在请求和响应过程中进行处理。
  • 负载均衡:将请求均匀分配到多个实例。
  • 断路器:保护系统免受故障蔓延。

二、集成Spring Cloud Gateway

  1. 添加依赖

    首先,在pom.xml中添加Spring Cloud Gateway的依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    

    确保在pom.xml中添加了Spring Cloud的版本管理:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2023.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 配置网关

    在Spring Boot应用的配置文件application.yml中定义路由规则。以下是一个简单的配置示例:

    spring:
      cloud:
        gateway:
          routes:
            - id: service1
              uri: http://localhost:8081
              predicates:
                - Path=/service1/**
              filters:
                - StripPrefix=1
            - id: service2
              uri: http://localhost:8082
              predicates:
                - Path=/service2/**
              filters:
                - StripPrefix=1
    

    在这个配置中,我们定义了两个路由:

    • service1:将请求转发到http://localhost:8081,路径前缀/service1将被移除。
    • service2:将请求转发到http://localhost:8082,路径前缀/service2将被移除。
  3. 主应用类

    在主应用类上添加@EnableGateway注解(通常,spring-boot-starter-gateway自动启用,无需额外注解):

    package cn.juwatech.gatewaydemo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class GatewayDemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(GatewayDemoApplication.class, args);
        }
    }
    

三、创建示例服务

为了测试API网关的路由功能,我们需要创建两个简单的服务应用。

  1. Service1

    package cn.juwatech.service1;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    public class Service1Application {
        public static void main(String[] args) {
            SpringApplication.run(Service1Application.class, args);
        }
    }
    
    @RestController
    class Service1Controller {
        @GetMapping("/greet")
        public String greet() {
            return "Hello from Service1!";
        }
    }
    
  2. Service2

    package cn.juwatech.service2;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    public class Service2Application {
        public static void main(String[] args) {
            SpringApplication.run(Service2Application.class, args);
        }
    }
    
    @RestController
    class Service2Controller {
        @GetMapping("/greet")
        public String greet() {
            return "Hello from Service2!";
        }
    }
    

四、定义自定义过滤器

Spring Cloud Gateway允许我们定义自定义过滤器,用于在请求和响应过程中插入自定义逻辑。以下是一个自定义过滤器的示例:

  1. 创建过滤器

    package cn.juwatech.gatewaydemo.filters;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.server.ServerWebExchange;
    import org.springframework.cloud.gateway.filter.GatewayFilter;
    import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    import org.springframework.web.server.WebFilter;
    import reactor.core.publisher.Mono;
    
    @Component
    public class CustomFilter implements GatewayFilter {
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            System.out.println("Custom filter: Request Path - " + exchange.getRequest().getPath());
            return chain.filter(exchange).then(Mono.fromRunnable(() -> {
                System.out.println("Custom filter: Response Status - " + exchange.getResponse().getStatusCode());
            }));
        }
    }
    

    注册自定义过滤器:

    package cn.juwatech.gatewaydemo;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.cloud.gateway.filter.GatewayFilter;
    import cn.juwatech.gatewaydemo.filters.CustomFilter;
    
    @Configuration
    public class GatewayConfig {
        @Bean
        public GatewayFilter customFilter() {
            return new CustomFilter();
        }
    }
    

五、负载均衡

Spring Cloud Gateway可以与Spring Cloud LoadBalancer结合使用,以实现客户端负载均衡。添加Spring Cloud LoadBalancer的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

在网关配置中,使用服务名进行路由:

spring:
  cloud:
    gateway:
      routes:
        - id: loadBalancedService
          uri: lb://SERVICE-NAME
          predicates:
            - Path=/service/**
          filters:
            - StripPrefix=1

在这里,lb://SERVICE-NAME表示负载均衡的服务名。

六、实现断路器

Spring Cloud Gateway支持断路器功能,通过Resilience4jHystrix库实现。在pom.xml中添加Resilience4j的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>

在配置文件中启用断路器:

spring:
  cloud:
    gateway:
      routes:
        - id: serviceWithCircuitBreaker
          uri: http://localhost:8081
          predicates:
            - Path=/service/**
          filters:
            - CircuitBreaker=cb
            - StripPrefix=1
  resilience4j:
    circuitbreaker:
      instances:
        cb:
          registerHealthIndicator: true
          failureRateThreshold: 50
          waitDurationInOpenState: 10000
          slidingWindowSize: 100

七、总结

在Spring Boot中实现API网关与路由,可以有效地集中管理服务的请求路由、过滤、负载均衡及断路器等功能。Spring Cloud Gateway提供了灵活的路由配置、丰富的过滤器机制,并且与Spring Cloud LoadBalancer、Resilience4j等技术无缝集成,帮助构建健壮的微服务架构。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

标签:网关,Spring,Boot,springframework,cloud,org,import,路由
From: https://www.cnblogs.com/szk123456/p/18317068

相关文章

  • 使用Java和Spring WebFlux构建响应式微服务
    使用Java和SpringWebFlux构建响应式微服务大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何使用Java和SpringWebFlux构建响应式微服务。SpringWebFlux是Spring框架的一部分,专为创建响应式应用程序而设计。在这篇文章中,我们将介绍如何......
  • 基于springboot的水产养殖系统
    博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • java毕业设计-基于springboot+vue的校园二手交易系统,基于java的校园二手交易系统,基于j
    文章目录前言演示视频项目背景项目架构和内容获取(文末获取)具体实现截图前台功能管理后台技术栈具体功能模块设计系统需求分析可行性分析系统测试为什么我?关于我我自己的网站前言博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • BootStrap框架的使用
    一、下载:BootStrap是一套用于HTML、CSS和JS开发的开源工具集。BootStrap下载官网学习的初级阶段,这里下载生产文件即可将下载的压缩包解压得到包含以下的文件:记住bootstrap.min.css文件的路径创建html骨架,link引入bootstrap.min.css文件可根据文档中的代码复制到htm......
  • 初用IDEA的springboot第五步
    使用日志先配置文件,在resources下新建一个log4j.properties,将以下内容粘贴进去##设置###stdout,log4j.rootLogger=all,D,E,stdout##输出信息到控制台###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appe......
  • 基于java+springboot+vue实现的公司日常考勤系统(文末源码+Lw)132
     基于SpringBoot+Vue的实现的公司日常考勤系统(源码+数据库+万字Lun文+流程图+ER图+结构图+开题报告+演示视频+软件包)选题背景及意义:分析企业的考勤管理系统过程可以看到,考勤管理系统中主要要解决的是:1.考勤信息的管理;2.考勤、出勤信息的请假及申请;3.给系统设定用户登录权......
  • Springboot宠物领养商城
    详细运行视频地址宠物领养商城_哔哩哔哩_bilibili1.可注册可登录2.首页-》可浏览热销商品,可查看用户发布的帖子,可查看热门资讯3.宠物商城-》宠物详情,可购买,可加入购物车,可展示评价4.宠物领养-》可查看用户发布的领养的帖子,可留言评论5.平台资讯-》可查看管理员发布的资讯......
  • 基于java+springboot+vue实现的在线课程管理系统(文末源码+Lw)133
     基于SpringBoot+Vue的实现的在线课程管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本在线课程管理系统有管理员,教师,学生。管理员功能有个人中心,学生管理,教师管理,在线课程管理,课件信息管理,知识要点管理,教学计划管理,考试大纲管理,科目类型管理,......
  • 基于java+springboot+vue实现的在线课程管理系统(文末源码+Lw)133
     基于SpringBoot+Vue的实现的在线课程管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本在线课程管理系统有管理员,教师,学生。管理员功能有个人中心,学生管理,教师管理,在线课程管理,课件信息管理,知识要点管理,教学计划管理,考试大纲管理,科目类型管理,......
  • org.springframework.beans.factory.BeanCreationException: Error creating bean wit
    场景:springcloud的服务service-order 启动和运行正常application.yml内容server:port:8007servlet:context-path:/service-orderspring:cloud:nacos:discovery:server-addr:192.168.56.30:8848application:name:service-......