A-A+

Spring Cloud Gateway

2020年08月31日 技术, 默认 暂无评论 阅读 3,030 次

Spring Cloud Gateway早就被玩烂了,所以这篇也不是什么教程,顶多算是个人总结/记录而已。

由来是因为要用Swagger,但是面向服务的系统,如果只是单独的集成Swagger就显得很混乱,所以需要Knife4j的分布式文档支持。

从我的理解上来讲,Gateway的作用就如同Nginx,是一个独立的服务,用来将所有的请求进行过滤、转发。从目前我使用的情况来看,它与其它服务是解耦的,无侵入的。

新建一个SpringBoot工程,pom文件主体如下:

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

<!--服务注册与发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>

入口类的代码如下:

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

    @Bean
    LoadBalancerInterceptor loadBalancerInterceptor(LoadBalancerClient loadBalance) {
        return new LoadBalancerInterceptor(loadBalance);
    }
}

yml配置文件如下:

server:
  port: 8082
  compression:
    enabled: true
    mime-types: application/json,application/xml,text/html,text/xml,text/plain

spring:
  http:
    encoding:
      charset: UTF-8
  application:
    name: examples-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      - id: examples-service-http-provider-route
        uri: lb://examples-service-http-provider
        predicates:
        - Path=/http-service/**
        filters:
        - StripPrefix=1
  main:
    allow-bean-definition-overriding: true

然后,运行,一个网关服务就运行起来了。作为一个示例项目,确实非常简单。

yml里面的spring.cloud.gateway就是网关的主要配置。

discovery.locator.enabled为true,代表自动发现服务,比如这个示例的Nacos注册了一个标识为examples-service-http-provider的服务,就可以使用http://localhost:8082/examples-service-http-provider/*来访问服务内的接口。

routes,代表路由配置信息。

1. uri中的lb代表负载均衡,指的是LoadBalanced。

2. predicates指的是需要转发的路径配置。

3. StripPrefix代表转发时,需要忽略的前缀。

这里配置的就是将所有http://localhost:8082/http-service/**的请求,通过负载均衡转发到http://examples-service-http-provider/**。

如果没有配置StripPrefix,就会转发到http://examples-service-http-provider/http-service/**(最开始我就在这里掉坑里了)。

目前为止,基本上就是这样,如有错误,欢迎指正。

觉的不错?可以关注我的公众号↑↑↑

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality

用户登录

分享到: