米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

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

  • lxd01
  • 7
  • 2020-03-24 00:03

3 月,跳不动了?>>>

前两篇文章我们已经初步的完成了一个小型的微服务框架,有服务注册中心,有订单服务,也有库存服务;订单服务也能通过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就可以搞定了,路由仅仅是网关的基本本能,基于网关我们可以做接口鉴权,限流等。下一篇文章我们讲讲怎么通过网关鉴权



这里给大家推荐一个在线软件复杂项交易平台:米鼠网 https://www.misuland.com

米鼠网自成立以来一直专注于从事软件项目人才招聘软件商城等,始终秉承“专业的服务,易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标,为中国境内企业提供国际化、专业化、个性化、的软件项目解决方案,我司拥有一流的项目经理团队,具备过硬的软件项目设计和实施能力,为全国不同行业客户提供优质的产品和服务,得到了客户的广泛赞誉。



如有侵权请联系邮箱(service@misuland.com)

猜你喜欢

评论留言