springcloud gateway网关

1、路由配置

1.1 搭建环境

  1. 创建工程导入坐标
 <!-- springcloudgateway的内部是通过netty + webflux实现
       webflux实现和springmvc存在冲突
   -->
  	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-gateway</artifactId>
		</dependency>
	</dependencies>
  1. 配置启动类
package com.yan.springcloud.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringCloudGateWayApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(SpringCloudGateWayApplication.class, args);
	}
}

  1. 修改application
server.port=8080
spring.application.name=gateway-server

##配置springcloudgateway路由
#配置路由id ,路由到微服务的uri,断言(判断条件)  保持唯一
spring.cloud.gateway.routes[0].id=product-service
#目标微服务请求地址
spring.cloud.gateway.routes[0].uri=http://127.0.0.1:9001
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates[0]= Path=/product/**

1.2 动态路由(面向服务的路由)

  1. 导入坐标
<!-- springcloudgateway的内部是通过netty + webflux实现
       webflux实现和springmvc存在冲突
   -->
  	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-gateway</artifactId>
		</dependency>
		
		<!-- 引入EurekaClient -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
	</dependencies>
  1. 配置启动类
package com.yan.springcloud.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringCloudGateWayApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(SpringCloudGateWayApplication.class, args);
	}
}

  1. 修改application
server.port=8080
spring.application.name=gateway-server

##配置springcloudgateway路由
#配置路由id ,路由到微服务的uri,断言(判断条件)  保持唯一
spring.cloud.gateway.routes[0].id=product-service
#目标微服务请求地址
#spring.cloud.gateway.routes[0].uri=http://127.0.0.1:9001
#lb:// 根据微服务名称从注册中心拉取服务请求路径
spring.cloud.gateway.routes[0].uri=lb://product-service
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates[0]= Path=/product/**

#配置eurekaClient
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
#使用IP地址注册
eureka.instance.prefer-ip-address=true
1.2.1 路径重写

路径重写是实现例如请求:http://product-service/product/1 变成http://product/1
在这里插入图片描述

1.2.2 开启微服务名称转发
#开启根据服务名称自动转发
spring.cloud.gateway.discovery.locator.enabled=true
#微服务名称以小写形式呈现
spring.cloud.gateway.discovery.locator.lower-case-service-id=true

测试地址:

http://localhost:8080/product-service/product/1

2、过滤器

2.1 过滤器生命周期

在这里插入图片描述

2.1 过滤器类型

在这里插入图片描述

3、统一鉴权

使用全局过滤器实现统一认证

package com.yan.springcloud.gateway.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;

import reactor.core.publisher.Mono;
/**
 * 自定义全局过滤器
 * 实现GlobalFilter和Ordered
 * @author Administrator
 *
 */
@Component
public class LoginFilter implements GlobalFilter,Ordered{
	
	/**
	 * 执行过滤器中的业务逻辑
	 * 	对请求参数access-token进行判断
	 * ServerWebExchange:相当于请求和响应的上下文(zuul中的RequestContext)
	 */
	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
		System.out.println("执行了全局过滤器");
		String token = exchange.getRequest().getQueryParams().getFirst("access-token");
		if(token == null){
			//未携带token,认证失败
			exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
			return exchange.getResponse().setComplete();
		}
		return chain.filter(exchange);
	}
	
	/**
	 * 指定过滤器的执行顺序,返回值越小,执行优先级越高
	 */
	@Override
	public int getOrder() {
		// TODO Auto-generated method stub
		return 0;
	}

}

4、网关限流

常见的限流算法:

4.1 计数器算法

在这里插入图片描述

4.2 漏桶算法

在这里插入图片描述
在这里插入图片描述

4.3 令牌桶算法

在这里插入图片描述

4.4 基于filter限流(令牌桶算法的实现)

在这里插入图片描述
在这里插入图片描述
(2)配置application
在这里插入图片描述
在这里插入图片描述
根据路径限流
在这里插入图片描述
根据参数限流(不允许多个限流存在,需要注释第一个)
在这里插入图片描述
修改配置文件
在这里插入图片描述
基于ip限流
在这里插入图片描述

5、网关的高可用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值