当前位置:   article > 正文

【SpringCloud-Eureka】Gateway网关_eureka gateway

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。

核心流程

Eureka服务注册

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

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

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

  1. <dependencies>
  2. <!--EurekaServer-->
  3. <dependency>
  4. <groupId>org.springframework.cloud</groupId>
  5. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  6. </dependency>
  7. <!--SpringBoot-->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-actuator</artifactId>
  15. </dependency>
  16. <!--简化开发-->
  17. <dependency>
  18. <groupId>org.projectlombok</groupId>
  19. <artifactId>lombok</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-test</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>junit</groupId>
  27. <artifactId>junit</artifactId>
  28. <scope>test</scope>
  29. </dependency>
  30. </dependencies>

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

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

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

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

第五步:直接启动这个类,然后在网站输入:localhost:7001即可进入以下网页

生产端

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

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

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

  1. <dependencies>
  2. <!--EurekaClient-->
  3. <dependency>
  4. <groupId>org.springframework.cloud</groupId>
  5. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-actuator</artifactId>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.mybatis.spring.boot</groupId>
  17. <artifactId>mybatis-spring-boot-starter</artifactId>
  18. </dependency>
  19. <dependency>
  20. <groupId>com.alibaba</groupId>
  21. <artifactId>druid-spring-boot-starter</artifactId>
  22. <version>1.1.23</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>mysql</groupId>
  26. <artifactId>mysql-connector-java</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-jdbc</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.projectlombok</groupId>
  34. <artifactId>lombok</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. </dependencies>

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

  1. server:
  2. port: 8001
  3. spring:
  4. application:
  5. name: cloud-payment-service
  6. eureka:
  7. client:
  8. register-with-eureka: true #表明将自己注册进EurekaServer
  9. fetch-registry: true
  10. service-url:
  11. defaultZone: http://eureka7001.com:7001/eureka/
  12. instance:
  13. instance-id: payment8001 #注册的服务名称

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

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

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

  1. @RestController
  2. public class PaymentController {
  3. @GetMapping("/payment/get/{id}")
  4. public String getPaymentById(@PathVariable("id") Long id){
  5. return "查询成功,id为:" + id;
  6. }
  7. }

第五步:启动此类 在Eureka注册中心上可以发现cloud-payment-service被注册进去了

Gateway网关

第一步:构建模块

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

  1. <dependencies>
  2. <!--Gateway网关-->
  3. <dependency>
  4. <groupId>org.springframework.cloud</groupId>
  5. <artifactId>spring-cloud-starter-gateway</artifactId>
  6. </dependency>
  7. <!--使用Eureka服务注册中心-->
  8. <dependency>
  9. <groupId>org.springframework.cloud</groupId>
  10. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  11. </dependency>
  12. <!--简化开发-->
  13. <dependency>
  14. <groupId>org.projectlombok</groupId>
  15. <artifactId>lombok</artifactId>
  16. <optional>true</optional>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-test</artifactId>
  21. </dependency>
  22. </dependencies>

第三步:修改application.yml

  1. server:
  2. port: 1221
  3. spring:
  4. application:
  5. name: cloud-gateway
  6. cloud:
  7. #配置路由
  8. gateway:
  9. #这里可以配置多个路由
  10. routes:
  11. - id: payment_routh #路由的id
  12. uri: http://localhost:8001 #匹配后提供服务的路由地址
  13. predicates:
  14. - Path=/payment/get/** #断言 路径相匹配的进行路由
  15. eureka:
  16. instance:
  17. hostname: cloud-gateway
  18. client:
  19. register-with-eureka: true #表明将自己注册进EurekaServer
  20. fetch-registry: true
  21. service-url:
  22. defaultZone: http://eureka7001.com:7001/eureka/

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

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

第五步:启动Gateway类,Eureka中也可以发现又注册进了一个客户端

验证网关

直接调用生产端的方法,网址:localhost:8001/payment/get/200

 通过网关去调用生产端,网址:localhost:1221/payment/get/200

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/544985
推荐阅读
相关标签
  

闽ICP备14008679号