赞
踩
路由(Route)是GateWay中最基本的组件之一,表示一个具体的路由信息载体,主要由下面几个部分组成:
id:路由唯一标识,区别于其他的route
url: 路由指向的目的地URL,客户端请求最终被转发到的微服务
order: 用于多个Route之间的排序,数值越小越靠前,匹配优先级越高
predicate:断言的作用是进行条件判断,只有断言为true,才执行路由
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。
在做Gateway网关服务前,我们需要先注册一个服务中心,否则无法使用网关。这里我使用的是Eureka这个服务注册中心。
第一步:首先构建Eureka模块,命名随意。可以通过Maven也可以使用Spring来构建项目。
第二步:修改pom.xml,引入依赖。
- <dependencies>
- <!--EurekaServer-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
- <!--SpringBoot-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <!--简化开发-->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
第三步:在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即可进入以下网页
既然已经完成了注册服务中心的构建,那么我们还需要构建一个生产端的来注册进Eureka中。
第一步:创建模块 命名随意。
第二步:在pom.xml中引入依赖
- <dependencies>
- <!--EurekaClient-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>1.1.23</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
第三步:在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被注册进去了
第一步:构建模块
第二步:在pom.xml中引入依赖
- <dependencies>
- <!--Gateway网关-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-gateway</artifactId>
- </dependency>
- <!--使用Eureka服务注册中心-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- <!--简化开发-->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- </dependency>
- </dependencies>
第三步:修改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中也可以发现又注册进了一个客户端
直接调用生产端的方法,网址:localhost:8001/payment/get/200
通过网关去调用生产端,网址:localhost:1221/payment/get/200
可以发现网关的功能已经实现了,可以隐藏注册进服务的生产端端口号
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。