[Spring cloud 一步步实现广告系统] 3. 网关路由
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Spring cloud 一步步实现广告系统] 3. 网关路由相关的知识,希望对你有一定的参考价值。
Zuul(Router and Filter)WIKI: 传送门
作用
- 认证,鉴权(Authentication/Security)
- 预判(Insights)
- 压力测试(Stress Testing)
- 灰度/金丝雀测试(Canary Testing)
- 动态路由(Dynamic Routing)
- 服务迁移(Service Migration)
- 降低负载(Load Shedding)
- 静态响应处理(Static Response handling)
- 主动/主动交换管理(Active/Active traffic management)
关键配置:
The configuration property
zuul.host.maxTotalConnections
andzuul.host.maxPerRouteConnections
, which default to 200 and 20 respectively.
创建mscx-ad-zuul
三步曲创建法:
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
加注解
@SpringCloudApplication
@EnableZuulProxy //启用网关
public class GatewayApplication
public static void main(String[] args)
SpringApplication.run(GatewayApplication.class, args);
改配置
spring:
application:
name: ad-gateway-zuul
server:
port: 1111
eureka:
client:
service-url:
defaultZone: http://server1:7777/eureka/,http://server2:8888/eureka/,http://server3:9999/eureka/
instance:
hostname: ad-gateway-zuul
zuul:
ignored-services: ‘*‘ # 过滤所有请求,除了下面routes中声明过的服务
routes:
sponsor: #在路由中自定义服务路由名称
path: /ad-sponsor/**
serviceId: mscx-ad-sponsor #微服务name
strip-prefix: false
search: #在路由中自定义服务路由名称
path: /ad-search/**
serviceId: mscx-ad-search #微服务name
strip-prefix: false
prefix: /gateway/api
strip-prefix: false #不对 prefix: /gateway/api 设置的路径进行截取,默认转发会截取掉配置的前缀
过滤器编写
我们来编写一个记录请求时间周期的过滤器,根据Filter的三种类型:Pre filters
,routing filters
和Post filters
,我们需要定义2个filter,用来记录开始和结束时间,很明显,我们需要实现Pre
& Post
2个过滤器。
@Slf4j
@Component
public class PreRequestFilter extends ZuulFilter
@Override
public String filterType()
// pre filter
return FilterConstants.PRE_TYPE;
@Override
public int filterOrder()
return 0;
@Override
public boolean shouldFilter()
return true;
@Override
public Object run() throws ZuulException
//获取当前请求的请求上下文
RequestContext requestContext = RequestContext.getCurrentContext();
//记录请求进入时间
requestContext.set("api_request_time", System.currentTimeMillis());
return null;
---
@Slf4j
@Component
public class AccessLogFilter extends ZuulFilter
@Override
public String filterType()
return FilterConstants.POST_TYPE;
@Override
public int filterOrder()
//需要最后一个执行的filter
return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;
@Override
public boolean shouldFilter()
return true;
@Override
public Object run() throws ZuulException
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
log.info("Request \"\" spent : seconds.", request.getRequestURI(),
(System.currentTimeMillis() - Long.valueOf(requestContext.get("api_request_time").toString())) / 1000);
return null;
Gateway
后续更新
以上是关于[Spring cloud 一步步实现广告系统] 3. 网关路由的主要内容,如果未能解决你的问题,请参考以下文章
[Spring cloud 一步步实现广告系统] 17. 根据流量类型查询广告
[Spring cloud 一步步实现广告系统] 22. 广告系统回顾总结
[Spring cloud 一步步实现广告系统] 3. 网关路由
[Spring cloud 一步步实现广告系统] 12. 广告索引介绍