目录
1 前言
2 实现步骤
2.1 创建一个模块作为网关并引入相关依赖
2.3 设置启动类
2.4 配置路由
3 网关路由的补充内容
3.1 路由断言
3.2 路由过滤器
1 前言
前端请求不能直接访问微服务,而是要请求网关。原因及网关的作用如下:
①网关做安全控制,即登录身份校验,校验通过才放行
②通过认证后,网关判断应该访问哪个微服务,将请求转发过去
注:本文参考自黑马程序员
2 实现步骤
2.1 创建一个模块作为网关并引入相关依赖
在项目目录下创建一个模块,引入的依赖如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--其它内容-->
<dependencies>
<!--common,这里记得改成自己的-->
<dependency>
<groupId>com.heima</groupId>
<artifactId>hm-common</artifactId>
<version>1.0.0</version>
</dependency>
<!--网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--负载均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
<!--其它内容-->
</project>
2.3 设置启动类
是的,这个网关需要启动类,代码如下:
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
2.4 配置路由
在网关模块的application中进行如下配置:
server:
port: 8080 # 前端就访问这个端口,然后由路由转发到其它端口
spring:
application:
name: gateway # 服务名
cloud:
nacos:
server-addr: 192.168.150.101:8848 # Nacos注册中心,IP记得换成自己的
gateway:
routes:
- id: item # 路由规则id,自定义,唯一
uri: lb://item-service # 路由的目标服务名,lb代表负载均衡,会从注册中心拉取服务列表
predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务
- Path=/items/**,/search/** # 以请求路径作为判断规则
- id: cart
uri: lb://cart-service
predicates:
- Path=/carts/** #/carts/xx之类的都会交给cart-service服务处理
# 其它内容
3 网关路由的补充内容
上述内容已经能够满足我们的大多数情况的需求,但是还有一些比较常用的内容需要我们学习。但此处只做简要介绍,具体可看官方文档,如下:
Spring Cloud Gateway
3.1 路由断言
表格如下(来自黑马程序员),为基本的路由断言:
3.2 路由过滤器
表格如下(来自黑马程序员),为基本的路由过滤器: