SpringCloud系列(37)--搭建SpringCloud Gateway_创idea 建springboot 3.0 cloud gateway
前言:上一节中我们简单的介绍了一下关于SpringCloud Gateway的相关知识,而本节的主要内容是关于如果去搭建SpringCloud Gateway。
1、在搭建SpringCloud Gateway前需要先了解Gateway网关路由的两种配置方式
(1)在配置文件yml里进行配置
(2)在代码中注入RouteLocator的Bean
关于如何使用以上两种方式去搭建SpringCloud Gateway的官方文档: https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#configuration-properties
2、搭建gateway模块
(1)在父工程下新建模块
(2)选择模块的项目类型为Maven并选择模块要使用的JDK版本
(3)填写子模块的名称,然后点完成即可完成创建
效果图:
(4)修改cloud-gateway-gateway9527子模块的pom.xml文件,然后reolad一下,下载依赖
例:
springcloud01 com.ken.springcloud 1.0-SNAPSHOT 4.0.0 cloud-gateway-gateway9527 org.springframework.cloud spring-cloud-starter-gateway org.springframework.cloud spring-cloud-starter-netflix-eureka-client com.ken.springcloud api-commons ${project.version} org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true
3、为子模块添加名为application的yml配置文件(注:yml是官方推荐的配置文件格式,最好使用yml文件而不是properties文件)
效果图:
如果application.yml不是绿色的,而是红色的,可以尝试install当前Maven工程,如果还不行可以尝试清除Idea的缓存
4、修改cloud-gateway-gateway9527模块的application.yml配置文件(这里我们先使用第一种方式即用配置文件yml来对Gateway网关路由进行配置)
server: port: 9527spring: application: name: cloud-gateway cloud: gateway: routes: #路由的ID,没有同定规则但要求唯一,建议配合服务名 - id: payment_routh #断言,对与路径相匹配的进行路由,即对http://localhost:8001/payment/get/**下的路径进行路由 predicates: - Path=/payment/get/** #匹配后提供服务的路由地址 uri: http://localhost:8001 #路由的ID,没有同定规则但要求唯一,建议配合服务名 - id: payment_routh2 #断言,对与路径相匹配的进行路由,即对http://localhost:8001/payment/lb/**下的路径进行路由 predicates: - Path=/payment/lb/** #匹配后提供服务的路由地址 uri: http://localhost:8001eureka: instance: hostname: cloud-gateway-service client: #表示是否将自己注册进Eureka Server里,默认为true register-with-eureka: true #是否从Eureka Server抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡 fetch-registry: true service-url: defaultZone: http://eureka7001.com:7001/eureka/
5、为cloud-gateway-gateway9527子模块新建一个主启动类,类名输入com.ken.springcloud.GateWayMain9527,然后创建即可
效果图:
6、编写GateWayMain9527主启动类
package com.ken.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class GateWayMain9527 { public static void main(String[] args) { SpringApplication.run(GateWayMain9527.class, args); }}
7、分别启动eureka-server7001、cloud-gateway-gateway9527、provider-payment8001
效果图:
8、在浏览器地址栏输入http://eureka7001.com:7001/然后进入eureka的界面查看cloud-gateway-gateway9527、provider-payment8001是否成功注册进eureka
9、在浏览器的地址栏里分别输入http://localhost:9527/payment/get/1、http://localhost:9527/payment/lb,通过调用接口可以看出我们成功的通过gateway来把请求从对cloud-gateway-gateway9527服务的访问转发到了对provider-payment8001服务的访问
效果图:
我是分割线
在上述Gateway的搭建过程中,我们使用了编写yml的方式来对Gateway网关路由进行了配置,而在一开始我们就介绍了SpringCloud Gateway网关路由有两种配置方式,接下来则是介绍关于第二种路由配置方式,即如何在代码中注入RouteLocator的Bean来进行路由
10、在代码中注入RouteLocator的Bean在com.ken.springcloud包下新建一个名为config的包
效果图:
11、在config包下新建一个名为GateWayConfig的类
效果图:
12、编写GateWayConfig类
package com.ken.springcloud.config;import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GateWayConfig { /** * 配置一个id为payment_routh的路由规则,当访问地址为http://localhost:9527/payment/get/**时会自动把请求转发到http://localhost:8001/payment/get/** * @param routeLocatorBuilder * @return */ @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) { RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes(); routes.route(\"payment_routh\", r -> r.path(\"/payment/get/**\").uri(\"http://localhost:8001\")).build(); return routes.build(); } /** * 配置一个id为payment_routh2的路由规则,当访问地址为http://localhost:9527/payment/lb/**时会自动把请求转发到http://localhost:8001/payment/lb/** * @param routeLocatorBuilder * @return */ @Bean public RouteLocator customRouteLocator2(RouteLocatorBuilder routeLocatorBuilder) { RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes(); routes.route(\"payment_routh2\", r -> r.path(\"/payment/lb/**\").uri(\"http://localhost:8001\")).build(); return routes.build(); }}
参数相关介绍:
13、注释掉yml配置文件里的关于路由的相关配置
server: port: 9527spring: application: name: cloud-gateway# cloud:# gateway:# routes:# #路由的ID,没有同定规则但要求唯一,建议配合服务名# - id: payment_routh# #断言,对与路径相匹配的进行路由,即对http://localhost:8001/payment/get/**下的路径进行路由# predicates:# - Path=/payment/get/**# #匹配后提供服务的路由地址# uri: http://localhost:8001# #路由的ID,没有同定规则但要求唯一,建议配合服务名# - id: payment_routh2# #断言,对与路径相匹配的进行路由,即对http://localhost:8001/payment/lb/**下的路径进行路由# predicates:# - Path=/payment/lb/**# #匹配后提供服务的路由地址# uri: http://localhost:8001eureka: instance: hostname: cloud-gateway-service client: #表示是否将自己注册进Eureka Server里,默认为true register-with-eureka: true #是否从Eureka Server抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡 fetch-registry: true service-url: defaultZone: http://eureka7001.com:7001/eureka/
14、重启cloud-gateway-gateway9527服务
效果图:
15、再次在浏览器的地址栏里分别输入http://localhost:9527/payment/get/1、http://localhost:9527/payment/lb,通过调用接口可以看出我们成功的通过gateway来把请求从对cloud-gateway-gateway9527服务的访问转发到了对provider-payment8001服务的访问
效果图: