Spring Cloud微服务架构从入门到会用(四)—服务网关Spring Cloud Gateway

前两篇文章我们已经初步的完成了一个小型的微服务框架,有服务注册中心,有订单服务,也有库存服务;订单服务也能通过feign进行服务间调用库存服务。那本文我们将引入服务网关Spring Cloud Gateway。

Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到API。Spring Cloud Gateway是基于Spring Framework5,Spring Boot 2.0构建的。Spring Cloud Gateway是Spring开发并用来替代Zuul的。Spring Cloud Gate是基于Spring Framework5的WebFlux实现的。

Zuul和Spring Cloud Gateway的对比大家请参考这篇文章:https://www.cnblogs.com/yizhishi/archive/2019/09/26/11588860.html

接下来我们开始引入Spring Cloud Gateway。

1. 创建网关服务module

按照第二篇文章创建一个module,起名为server-gateway。

2. 修改pom文件,引入gateway
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>

    <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>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

这里我们同样将gateway注册到eureka。

3. 修改启动类
@SpringBootApplication
@EnableEurekaClient
public class ServerGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServerGatewayApplication.class, args);
    }

}

这里只需要加上eureka客户端的注解即可

4. 修改配置文件
server.port=10010
spring.application.name=server-gateway

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.instance.instance-id=${spring.application.name}:${server.port}

# 路由到app-storage服务
spring.cloud.gateway.routes[0].id=app-storage
spring.cloud.gateway.routes[0].uri=lb://APP-STORAGE
spring.cloud.gateway.routes[0].predicates[0]=Path=/storage/v1/**
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=2
# 路由到app-order服务
spring.cloud.gateway.routes[1].id=app-order
spring.cloud.gateway.routes[1].uri=lb://APP-ORDER
spring.cloud.gateway.routes[1].predicates[0]=Path=/order/v1/**
spring.cloud.gateway.routes[1].filters[0]=StripPrefix=2

这里我们着重介绍下,怎么配置路由,以app-storage为例。

  • spring.cloud.gateway.routes[0].id 是配置这个路由唯一id
  • spring.cloud.gateway.routes[0].uri是配置uri也就是app-storage所在的服务,这里使用lb://是代表采用负载均衡
  • spring.cloud.gateway.routes[0].predicates[0]是配置请求app-storage下所有接口的请求前缀
  • spring.cloud.gateway.routes[0].filters[0]是用来配置转发到app-storage上的服务路径时,要去掉两个/的路径。比如直接访问app-storage的服务的路径是http://ip:port/storage/deduct,我们这里配置的是/storage/v1,那么我们通过网关访问的时候就是http://ip:port/storage/v1/storage/deduct,当网关转发的时候,会去找app-storage服务下的storage/v1/storage/deduct接口,这个接口显然是没有的,只有storage/deduct接口,这个时候就需要去掉storage/v1,一共是两个前缀,所以这儿要写2.

好了,这里我们就可以通过网关访问app-storage和app-order服务了

5. 通过gateway访问服务

依次启动server-eureka,server-gateway,app-storage,app-order

访问 http://127.0.0.1:10010/order/v1/order/placeOrder/commit ,我们上一篇文章写好的下单接口。因为我们加了请求前缀order/v1,所以再这里要加上。

如果返回true,代表网关配置成功。

网关如果只是用来路由就没有必要上Spring Cloud Gateway了,nginx就可以搞定了,路由仅仅是网关的基本本能,基于网关我们可以做接口鉴权,限流等。下一篇文章我们讲讲怎么通过网关鉴权

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值