1、创建一个api-gateway的工程并加入依赖
<!--加入gateway的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2、创建启动类
@SpringBootApplication
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class,args);
}
}
3、修改配置文件
cloud:
gateway:
routes:#l路由数组、路由 就是指当请求满足什么样的条件的时候转发到那个微服务上
- id: #当前路由发的标识,要求唯一
uri: #请求最终要被转发到的地址
order:#路由的优先级,数字越小代表路由的优先级越高
predicates: #断言 (条件判断)
filters:#过滤器
server:
port: 7000
spring:
application:
name: api-gateway
# 配置api
cloud:
gateway:
routes:
- id: product_route # 路由的唯一标识,只要不重复都可以,如果不写默认会通过UUID产生,一般写成被路由的服务名称
uri: http://localhost:8081/ # 被路由的地址
order: 1 #表示优先级 数字越小优先级越高
predicates: #断言: 执行路由的判断条件
- Path= /product_serv/**
filters: # 过滤器: 可以在请求前或请求后作一些手脚
- StripPrefix=1
现在在配置文件中写死了转发路径的地址, 前面我们已经分析过地址写死带来的问题, 接下来我们从注册中心获取此地址。
1、加入nacos依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
2、在主启动类上加入服务发现的注解
@SpringBootApplication
@EnableDiscoveryClient
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class,args);
}
}
3、修改application.yml的配置文件
server:
port: 7000
spring:
application:
name: api-gateway
# 配置api
cloud:
gateway:
routes:
- id: product_route # 路由的唯一标识,只要不重复都可以,如果不写默认会通过UUID产生,一般写成被路由的服务名称
uri: lb://shop-product # 被路由的地址
order: 1 #表示优先级 数字越小优先级越高
predicates: #断言: 执行路由的判断条件
- Path=/product_serv/**
filters: # 过滤器: 可以在请求前或请求后作一些手脚
- StripPrefix=1
nacos:
discovery:
server-addr: localhost:8848
简写版
第一步:去电关于路由的配置
server:
port: 7000
spring:
application:
name: api-gateway
# 配置api
cloud:
nacos:
discovery:
server-addr: localhost:8848
gateway:
discovery:
locator:
enabled: true
第二步、启动项目,并通过网管去访问微服务
这时候,就发现只要按照网关地址/微服务/接口的格式去访问,就可以得到成功响应