- 简介: 讲解网关的作用和使用场景
- 网关介绍
- 什么是网关
- API Gateway, 是系统的唯一对外的入口, 介于客户端和服务器端之间的中间层, 处理非业务功能提供路由请求, 鉴权, 缓存, 限流等功能
- 统一接入
- 智能路由
- AB测试, 灰度测试
- 负载均衡, 容灾处理
- 日志埋点(类似Nginx日志)
- 流量监控
- 限流处理
- 监控
- 机器网络隔离
- 主流网关
- zuul: 是Netflix开源的微服务网关, 和Eureka, Ribbon, Hystrix等组件配合使用, Zuul 2.0比1.0性能高很多
- kong: 由Mashape公司开源的, 基于Nginx的API gateway
- nginx+lua: 是一个高性能的HTTP和反向代理服务器, lua是脚本语言, 让Nginx执行Lua脚本, 并且高并发, 非阻塞的处理各种请求
- SpringCloud的网关组件zuul基本使用
- 简介: 讲解zuul网关基本使用
- 使用步骤
- 加入依赖
- 启动类加入注解 @EnableZuulProxy
- 默认继承断路器 @EnableCircuitBreaker
- 默认访问规则: http://gateway:port/service-id/**
- 例子:
- 通过网关调用示例: http://localhost:9000/order-service/api/v1/order/get?product_id=1&user_id=1
- 默认 /order-service/api/v1/order/save?user_id&product_id=1
- 自定义: /jspeng_order/api/v1/order/save?user_id=2&product_id=1
- 自定义路由转发: (注意, 相同的路由规则后者会覆盖前者配置)
zuul:
routes:
order-service: /apigateway/order/**
product-service: /apigateway/product/**
# 源码: private Set<String> sensitiveHeaders = new LinkedHashSet(Arrays.asList("Cookie", "Set-Cookie", "Authorization"));
# 配置文件中将, http请求头过滤设置为空
sensitive-headers:
- 环境隔离配置
- 需求: 不想让默认的服务对外暴露接口
/order-service/api/v1/order/save
- 配置
zuul:
ignored-patterns: /*-service/**
- /order-service/api/v1/order/save
- Zuul常用问题分析, 以及网关过滤原理
- 路由名称定义问题
给每一个路由多配置一个服务标识
order-service: /apigateway/order/**
product-service: /apigateway/product/**
- http请求头过滤问题
# 配置文件中将, http请求头过滤设置为空
sensitive-headers:
- 过滤器执行顺序问题, 过滤器的order值越小
- 共享RequesstContext, 上下文对象
- zuul过滤实现登录鉴权
package cn.jishupeng.apigateway.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpStatus;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@Component
public class LoginFilter extends ZuulFilter {
@Override
public String filterType() {
return FilterConstants.PRE_TYPE;
}
@Override
public int filterOrder() {
return 4;
}
@Override
public boolean shouldFilter() {
RequestContext context = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String uri = request.getRequestURI();
if ("/apigateway/order/api/v1/order/get".equalsIgnoreCase(uri)) {
return true;
}
return false;
}
@Override
public Object run() throws ZuulException {
System.out.println("进入了拦截方法");
RequestContext context = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String token = request.getHeader("token");
if (StringUtils.isBlank(token)) {
token = request.getParameter("token");
}
if (StringUtils.isBlank(token)) {
context.setSendZuulResponse(false);
context.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
}
return null;
}
}
```
#java# 微服务网关zuul
最新推荐文章于 2025-05-16 21:30:00 发布