4.搭建GetWay模块:
4.1.入门配置:
a.新建GetWay模块:
- 1.模块名称是:
cloud-getway9527
b.改pom,引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
需要注意的一些细节,在Gateway服务模块不要加以下依赖,否则启动会报错
<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>
b.修改YML
- 1.配置文件中配置实现将9527服务注册到Eureka和配置GetWay路由:
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://localhost:8001 #匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** # 断言,路径相匹配的进行路由
- id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://localhost:8001 #匹配后提供服务的路由地址
predicates:
- Path=/payment/lb/** # 断言,路径相匹配的进行路由
eureka:
instance:
hostname: cloud-gateway-service
client: #服务提供者provider注册进eureka服务列表内
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
- 2.路由匹配:
c.主启动:
- 1.Gateway也需要注册到Eureka注册中心
@SpringBootApplication
@EnableEurekaClient
public class GatewayMain9527 {
public static void main(String[] args) {
SpringApplication.run(GatewayMain9527.class,args);
}
}
d.使用测试:
- 1.在没配置Gateway之前我们对cloud-provider-payment8001模块的访问是依靠它自己的端口号的,
现在有了网关我们可以使用网关的端口号,路由到具体的服务模块然后在根据断言找到对应的方法名调用
。
4.2.打通链路:
a.
b.
c.通过微服务名实现动态路由
- 1.默认情况下Gateway会根据注册中心的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能
- 2.首先需要开启从注册中心动态创建路由的功能,利用微服务名进行路由
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
- 3.URL换成服务名
uri: lb://CLOUD-PAYMENT-SERVICE
- 4.完整的yml文件:
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
routes:
- id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名
#匹配后提供服务的路由地址
#uri: http://localhost:8001
uri: lb://CLOUD-PAYMENT-SERVICE
predicates:
- Path=/payment/get/** # 断言,路径相匹配的进行路由
- id: payment_route2
#uri: http://localhost:8001
uri: lb://CLOUD-PAYMENT-SERVICE
predicates:
- Path=/payment/lb/** #断言,路径相匹配的进行路由
- After=2020-03-09T22:40:37.365+08:00[Asia/Shanghai]
4.3.路由配置的两种方式
a.在配置文件yml中配置
- 1.在上面入门案例中使用的是配置文件配置方式
b.代码中注入RouteLocator的Bean
- 1.配置了一个id为route-name的路由规则,当访问地址
http://localhost:9527/guone
i时,会自动转发到地址http://news.baidu.com/guonei
@Configuration
public class GateWayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("path route atguigu",
r ->r.path("/guonei").uri("https://www.baidu.com")).build();
return routes.build();
}
}