java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Cloud Gateway路由配置

Spring Cloud Gateway路由配置怎么做?快速入门教程与实战示例

作者:ADRU

还在为微服务网关选型发愁?本文深入浅出讲解Spring Cloud Gateway的核心概念、路由与过滤器机制,并通过Consul注册中心演示快速上手配置,帮你轻松实现API路由转发和网关管理

微服务网关SpringCloudGateway

1.概述

Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,

例如:安全、监控/埋点、限流等。

2.核心概念

网关提供API全托管服务,丰富的API管理功能,辅助企业管理大规模的API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等贡呢。

一般来说网关对外暴露的URL或者接口信息,我们统称为路由信息。

如果研发过网关中间件或者使用过Zuul的人,会知道网关的核心是Filter以及Filter Chain(Filter责任链)。Sprig Cloud Gateway也具有路由和Filter的概念。

下面介绍一下Spring Cloud Gateway中几个重要的概念。

 如上图中所示,http请求会先被ngnix进行过滤将有用的请求交给网关也就是今天说的Gateway,然后由Gateway交给对应的api

快速入门

以Spring Boot框架开发为例,启动一个Gateway服务模块(以Consul作为注册中心),一个后端服务模块。client端请求经gateway服务把请求路由到后端服务。

前提条件:

1.微服务开发

这里以使用Spring Boot框架开发微服务为例,启动一个服务并注册到Consul。

引入依赖:

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

注册服务到Consul,配置文件配置如下:

spring:  application:    name: service-consumer  cloud:    consul:      host: 127.0.0.1      port: 8500      discovery:        service-name: service-consumer

如下定义RestController,发布HTTP接口。

(注:此为服务端配置,经Gateway把请求路由转发到该服务上。)

@RestController@RequestMapping("/user")
public class UserController {    
    @Resource
    private UserService userService;  
  
    @GetMapping(value = "/info")
    public User info() {
        return userService.info();    
    }
}

2.网关配置创建一个Gateway服务,引入以下依赖:

<dependency>    
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

启动类配置如下:

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

Spring Cloud Gateway对client端请求起到路由功能,主要配置如下:

server:  port: 8098spring:  application:    name: service-gateway  cloud:    gateway:      discovery:        locator:          enabled: true             lower-case-service-id: true      consul:      host: 127.0.0.1 #注册gateway网关到consul      port: 8500      discovery:        service-name: service-gateway

此时使用http://localhost:8089/service-consumer/user/info访问服务,网关即可对服务进行路由转发,把请求转发到具体后端服务上。

此时,url中使用的url前缀service-consumer,是后端服务在Consul注册的服务名称转为小写字母以后的字符串。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文