`
raymond.chen
  • 浏览: 1441201 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

服务网关Spring Cloud Gateway

 
阅读更多

Spring Cloud Gateway是由Spring官方基于Spring5.0,Spring Boot2.0,Project Reactor等技术开发的网关,目的是代替原先版本中的Spring Cloud Netfilx Zuul。Spring Cloud Gateway基于Webflux,比较完美地支持异步非阻塞编程,很多功能实现起来比较方便。

 

Spring Cloud Gateway的特征:

        基于 Java 8 编码

        基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0 动态路由

        Predicates 和 Filters 作用于特定路由

        集成 Hystrix 断路器

        支持 Spring Cloud DiscoveryClient 配置路由,与服务发现与注册配合使用

        易于编写的 Predicates(断言) 和 Filters

        限流

       支持 WebSockets

        路径重写

 

创建service-gateway工程说明Spring Cloud Gateway的使用

     pom.xml文件的关键配置:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.0.7.RELEASE</version>
	<relativePath/>
</parent>

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-gateway</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
</dependencies>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Finchley.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

 

     启动类:

@SpringBootApplication
@EnableEurekaClient
public class Main {
	public static void main(String[] args) {
		SpringApplication.run(Main.class, args);
	}	
}

 

     application.yml文件的配置:

server:
  port: 2001

eureka:
  instance: 
    hostname: ${spring.cloud.client.ip-address}
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
    prefer-ip-address: true
  client:
    service-url:
      defaultZone: http://root:123456@${eureka.instance.hostname}:7001/eureka/
  
spring:
  application:
    name: service-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: false  #关闭通过服务名路由到具体服务实例的功能
      routes:
        - id: service-id
#          uri: http://localhost:9001   #目标服务地址
          uri: lb://service-consumer-1  #以负载均衡方式路由到目标服务,格式为 lb://服务名
          predicates:
            - Path=/api/**     #基于路径的路由策略
          filters:
            - StripPrefix=1    #去掉路径前缀

     访问网关地址 http://localhost:2001/api/addUser  会路由到微服务地址 http://localhost:9001/addUser

 

 开启以服务名开头的请求路径转发到对应的服务:

server:
  port: 2001

eureka:
  instance: 
    hostname: ${spring.cloud.client.ip-address}
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
    prefer-ip-address: true
  client:
    service-url:
      defaultZone: http://root:123456@${eureka.instance.hostname}:7001/eureka/
  
spring:
  application:
    name: service-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true               #启用通过服务名路由到具体的服务实例
          lowerCaseServiceId: true    #启用服务名称小写支持,即将请求路径上的服务名配置为小写

      访问网关地址 http://localhost:2001/service-consumer-1/addUser  会路由到微服务地址 http://localhost:9001/addUser

 

设置spring.cloud.gateway.discovery.locator.enabled=true,表明gateway开启服务注册和发现的功能,并且gateway自动根据服务发现为每一个服务创建一个router,这个router将以服务名开头的请求路径转发到对应的服务。此时,gateway的路由规则是:

       http://Gateway_HOST:Gateway_PORT/大写的serviceId/**

             其中微服务名默认大写访问

 

设置spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true,可以将请求路径上的服务名配置为小写。

 

 更改Spring Cloud Gateway的默认负载均衡策略

      当同一服务名下有多个服务实例时,默认是采用轮询的负载均衡策略,通过在启动类配置负载均衡Bean类可以更改默认策略。

/**
 * 更改gateway服务路由的负载均衡策略
 */
@Bean
public IRule feignRule(){
	return new RandomRule();
}

 

配置Gateway的路由熔断功能

      熔断器控制类:

@RestController
public class HystrixController {
	@GetMapping("/hystrixCommandFallback")
	public Response hystrixCommandFallback(){
		Response response = new Response("100", "服务暂时不可用");
		return response;
	}
}

 

      全局路由熔断的配置:

spring:
  cloud:
    gateway:
      default-filters:
        - name: Hystrix
          args:
            name: hystrixCommand
            fallbackUri: forward:/hystrixCommandFallback

 

     特定路由的熔断配置: 

spring:
  cloud:
    gateway:
      routes:
        - id: a
          uri: lb://service-consumer-1
          predicates:
            - Path=/cjm/**
          filters:
            - StripPrefix=1
            - name: Hystrix  #熔断器过滤器
              args:
                name: hystrixCommand  #熔断器名称,自行定义
                fallbackUri: forward:/hystrixCommandFallback  #回退方法

 

服务网关Spring Cloud Gateway -- Predicate介绍

 

服务网关Spring Cloud Gateway -- 全局过滤器

 

服务网关Spring Cloud Gateway -- 网关过滤器工厂

 

分享到:
评论

相关推荐

    springcloud Gateway网关-压测用.zip

    SpringCloud Gateway作为一款现代化的微服务网关,它在企业级分布式系统中扮演着至关重要的角色。这个名为"springcloud Gateway网关-压测用.zip"的压缩包包含了一个用于性能测试的配置,目的是评估和优化Gateway的...

    最新Spring Cloud Gateway 官方参考指南-中文版-3.x

    Spring Cloud Gateway 是一款基于Spring生态系统构建的API网关,它主要设计用于提供一种简单而有效的方式来路由API,并为API提供核心关注点,如安全性、监控/度量和弹性。在3.1.3版本中,它利用了Spring Boot 2.x、...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...

    springcloud gateway 全局过滤器统一签名判定.doc

    它是Spring Cloud生态中的一个API网关服务,提供路由、熔断、限流等能力,可以作为所有微服务的统一入口。为了添加自定义的全局过滤器,我们需要创建一个新的Java类并实现`GlobalFilter`接口。这个过滤器将在每个...

    Spring Cloud Gateway的全局异常处理

    Spring Cloud Gateway作为一款基于Spring Framework 5、Project Reactor和Spring Boot 2.0构建的云原生网关框架,它提供了强大的路由转发能力和灵活的过滤器模型,能够很好地满足微服务网关的各种需求。然而,在实际...

    springcloud下通过gateway转发websocket

    在IT行业中,Spring Cloud Gateway作为Spring Cloud生态体系中的一个关键组件,被广泛用于构建微服务架构中的API网关。这个框架允许我们集中处理各种请求,包括路由、过滤、安全等,极大地简化了服务间的通信。而...

    spring cloud gateway配置Hystrix 熔断、限流、后台调用注意点.pdf

    Spring Cloud Gateway 是一种基于 Spring Boot 框架的 API 网关解决方案,提供了许多实用的功能来管理和保护微服务架构中的 API。其中,Hystrix 熔断、限流和后台调用是 Spring Cloud Gateway 的三个关键组件,本文...

    spring cloud gateway 例子

    Spring Cloud Gateway 是一款基于 Spring Framework 5 和 Spring Boot 2 设计的云原生微服务网关,它旨在提供一种简单而有效的方式来对 API 进行路由,同时提供了过滤器功能,可以进行权限验证、限流、日志记录等...

    Spring Cloud Gateway 2.1 使用手册中文版.pdf

    这个项目提供了一个构建在 Spring 生态系统之上的 API 网关,包括:Spring 5,Spring ... Spring Cloud Gateway 旨在提供一种简单而有效的 API 路 由方式,并为其提供横切关注点,例如:安全,监控/指标和弹性。

    spring cloud zookeeper gateway

    Spring Cloud Zookeeper Gateway 是一个基于Spring Cloud生态系统的项目,它结合了Zookeeper作为微服务注册中心和Spring Cloud Gateway作为服务网关的解决方案。这个项目旨在为开发者提供一个快速搭建微服务架构的...

    Spring Cloud Eureka + Spring Cloud Gateway + Spring Cloud Zipkin

    项目中包含的SpringCloud中文文档将为开发者提供详细的指导,帮助他们理解和使用这些组件。文档通常会涵盖安装配置、基本使用、高级特性以及最佳实践等内容,是学习和实施微服务架构的重要参考资料。 总之,Spring ...

    SpringCloudGateway2.1使用手册中文版.rar

    在使用 SpringCloudGateway2.1 使用手册中文版时,你可以找到关于如何配置路由、使用过滤器、集成服务发现、安全设置等方面的详细指导。手册中应该会包含以下内容: 1. **快速入门**:介绍如何创建基本的 Spring ...

    springcloud实现gate网关转发功能和整合websocket源码

    在本文中,我们将深入探讨如何使用Spring Cloud Gateway实现网关转发功能,并整合WebSocket源码,以便在微服务架构中提供高效、灵活的数据通信。首先,让我们先了解一下Spring Cloud Gateway及其重要性。 Spring ...

    详解SpringCloud Finchley Gateway 统一异常处理

    详解 SpringCloud Finchley Gateway 统一异常处理 SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud ...

    SpringCloud.03.网关Gateway 配置文件

    在Spring Cloud生态体系中,Spring Cloud Gateway作为新一代的API网关,被广泛应用于微服务架构中,用于统一处理请求路由、过滤器链、限流、熔断等核心功能。本篇将详细介绍Spring Cloud Gateway的配置文件相关知识...

    spring cloud gateway跨域实现

    配置完成后,启动Spring Cloud Gateway服务,然后在前端应用中发起跨域请求,检查是否能正常通信。如果一切配置无误,你应该能在后端服务接收到前端的请求,并且浏览器不会因为跨域限制而报错。 总的来说,Spring ...

    springcloud zuul gateway 服务网关

    SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...

    spring-cloud-gateway-demo.zip

    Spring Cloud Gateway 是一款基于 Spring Framework 5 和 Spring Boot 2 设计的现代化微服务路由网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。在本示例 "spring-cloud-gateway-demo.zip" 中...

    基于Nacos实现Spring Cloud Gateway实现动态路由的方法示例

    在现代微服务架构中,Spring Cloud Gateway作为一款强大的API网关,被广泛应用于服务路由、熔断、限流等场景。而Nacos作为阿里巴巴提供的一个分布式服务治理平台,提供了服务注册与发现、配置管理等功能。将Nacos与...

    SpringCloud Finchley Gateway 缓存请求Body和Form表单的实现

    在构建微服务架构时,Spring Cloud Gateway作为API网关,起着至关重要的作用。它提供了路由、过滤器等功能,能够方便地对上游请求进行处理和转发。然而,有些场景下,我们可能需要缓存请求的Body(如JSON数据)或...

Global site tag (gtag.js) - Google Analytics