【SpringCloud-Eureka】Gateway网关

Gateway概念

特征

核心流程

Eureka服务注册

生产端

Gateway网关

验证网关


Gateway概念

路由(Route)是GateWay中最基本的组件之一,表示一个具体的路由信息载体,主要由下面几个部分组成:

  1. id:路由唯一标识,区别于其他的route

  2. url: 路由指向的目的地URL,客户端请求最终被转发到的微服务

  3. order: 用于多个Route之间的排序,数值越小越靠前,匹配优先级越高

  4. predicate:断言的作用是进行条件判断,只有断言为true,才执行路由

  5. filter: 过滤器用于修改请求和响应信息

特征

(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

(2)集成 Hystrix 断路器

(3)集成 Spring Cloud DiscoveryClient

(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters

(5)具备一些网关的高级功能:动态路由、限流、路径重写

这里尤其需要注意三个关键术语:

①Filter(过滤器):

和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。

②Route(路由):

网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。

③Predicate(断言):

这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。

核心流程

【SpringCloud-Eureka】Gateway网关_第1张图片

Eureka服务注册

        在做Gateway网关服务前,我们需要先注册一个服务中心,否则无法使用网关。这里我使用的是Eureka这个服务注册中心。

第一步:首先构建Eureka模块,命名随意。可以通过Maven也可以使用Spring来构建项目。

第二步:修改pom.xml,引入依赖。


    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
    
    
        org.projectlombok
        lombok
    
    
        org.springframework.boot
        spring-boot-starter-test
    
    
        junit
        junit
        test
    

第三步:在application.yml中进行配置

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #Eureka服务器的实例名称
  client:
    register-with-eureka: false #不向注册中心注册自己
    fetch-registry: false #不需要去检索服务
    service-url:
      #设置与EurekaServer交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://localhost:7001/eureka/

第四步:启动类上添加注解

@SpringBootApplication
@EnableEurekaClient //此注解是用于在Eureka注册客户端使用
public class Gateway1221 {
    public static void main(String[] args) {
        SpringApplication.run(Gateway1221.class,args);
    }
}

第五步:直接启动这个类,然后在网站输入:localhost:7001即可进入以下网页 【SpringCloud-Eureka】Gateway网关_第2张图片

生产端

既然已经完成了注册服务中心的构建,那么我们还需要构建一个生产端的来注册进Eureka中。

第一步:创建模块 命名随意。

第二步:在pom.xml中引入依赖


    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
    
    
        com.alibaba
        druid-spring-boot-starter
        1.1.23
    
    
        mysql
        mysql-connector-java
    
    
        org.springframework.boot
        spring-boot-starter-jdbc
    
    
        org.projectlombok
        lombok
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    

第三步:在application.yml中进行配置

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
    
eureka:
  client:
    register-with-eureka: true #表明将自己注册进EurekaServer
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/
  instance:
    instance-id: payment8001 #注册的服务名称

第四步:在启动类上添加注解

@SpringBootApplication
@EnableEurekaClient  //此注解是用于在Eureka注册客户端使用
public class Payment8001Application {
    public static void main(String[] args) {
        SpringApplication.run(Payment8001Application.class,args);
    }
}

第五步:写controller层的逻辑(由于简化开发 在此不写业务层逻辑)

@RestController
public class PaymentController {
	@GetMapping("/payment/get/{id}")
    public String getPaymentById(@PathVariable("id") Long id){
        return "查询成功,id为:" + id;
    }
}

第五步:启动此类 在Eureka注册中心上可以发现cloud-payment-service被注册进去了 【SpringCloud-Eureka】Gateway网关_第3张图片

Gateway网关

第一步:构建模块

第二步:在pom.xml中引入依赖


    
    
        org.springframework.cloud
        spring-cloud-starter-gateway
    
    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    
    
    
        org.projectlombok
        lombok
        true
    
    
        org.springframework.boot
        spring-boot-starter-test
    

第三步:修改application.yml

server:
  port: 1221

spring:
  application:
    name: cloud-gateway
  cloud:
    #配置路由
    gateway:
      #这里可以配置多个路由
      routes:
        - id: payment_routh #路由的id
          uri: http://localhost:8001 #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/get/** #断言 路径相匹配的进行路由

eureka:
  instance:
    hostname: cloud-gateway
  client:
    register-with-eureka: true #表明将自己注册进EurekaServer
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/

第四步:启动类上添加注解

@SpringBootApplication
@EnableEurekaClient //此注解是用于在Eureka注册客户端使用
public class Gateway1221 {
    public static void main(String[] args) {
        SpringApplication.run(Gateway1221.class,args);
    }
}

第五步:启动Gateway类,Eureka中也可以发现又注册进了一个客户端 【SpringCloud-Eureka】Gateway网关_第4张图片

验证网关

直接调用生产端的方法,网址:localhost:8001/payment/get/200【SpringCloud-Eureka】Gateway网关_第5张图片

 通过网关去调用生产端,网址:localhost:1221/payment/get/200 【SpringCloud-Eureka】Gateway网关_第6张图片

 可以发现网关的功能已经实现了,可以隐藏注册进服务的生产端端口号

你可能感兴趣的:(SpringCloud,spring,cloud,eureka,gateway)