资讯专栏INFORMATION COLUMN

[Spring cloud 一步步实现广告系统] 3. 网关路由

miguel.jiang / 619人阅读

摘要:获取当前请求的请求上下文记录请求进入时间需要最后一个执行的后续更新做一个好人。

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)

关键配置:

</>复制代码

  1. The configuration property zuul.host.maxTotalConnections and zuul.host.maxPerRouteConnections, which default to 200 and 20 respectively.
创建mscx-ad-zuul

三步曲创建法:

添加依赖

</>复制代码

  1. org.springframework.cloud
  2. spring-cloud-starter-netflix-zuul
  3. org.springframework.cloud
  4. spring-cloud-starter-netflix-eureka-client
加注解

</>复制代码

  1. @SpringCloudApplication
  2. @EnableZuulProxy //启用网关
  3. public class GatewayApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(GatewayApplication.class, args);
  6. }
  7. }
改配置

</>复制代码

  1. spring:
  2. application:
  3. name: ad-gateway-zuul
  4. server:
  5. port: 1111
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http://server1:7777/eureka/,http://server2:8888/eureka/,http://server3:9999/eureka/
  10. instance:
  11. hostname: ad-gateway-zuul
  12. zuul:
  13. ignored-services: "*" # 过滤所有请求,除了下面routes中声明过的服务
  14. routes:
  15. sponsor: #在路由中自定义服务路由名称
  16. path: /ad-sponsor/**
  17. serviceId: mscx-ad-sponsor #微服务name
  18. strip-prefix: false
  19. search: #在路由中自定义服务路由名称
  20. path: /ad-search/**
  21. serviceId: mscx-ad-search #微服务name
  22. strip-prefix: false
  23. prefix: /gateway/api
  24. strip-prefix: false #不对 prefix: /gateway/api 设置的路径进行截取,默认转发会截取掉配置的前缀
过滤器编写

我们来编写一个记录请求时间周期的过滤器,根据Filter的三种类型:Pre filters,routing filtersPost filters,我们需要定义2个filter,用来记录开始和结束时间,很明显,我们需要实现Pre & Post2个过滤器。

</>复制代码

  1. @Slf4j
  2. @Component
  3. public class PreRequestFilter extends ZuulFilter {
  4. @Override
  5. public String filterType() {
  6. // pre filter
  7. return FilterConstants.PRE_TYPE;
  8. }
  9. @Override
  10. public int filterOrder() {
  11. return 0;
  12. }
  13. @Override
  14. public boolean shouldFilter() {
  15. return true;
  16. }
  17. @Override
  18. public Object run() throws ZuulException {
  19. //获取当前请求的请求上下文
  20. RequestContext requestContext = RequestContext.getCurrentContext();
  21. //记录请求进入时间
  22. requestContext.set("api_request_time", System.currentTimeMillis());
  23. return null;
  24. }
  25. }
  26. ---
  27. @Slf4j
  28. @Component
  29. public class AccessLogFilter extends ZuulFilter {
  30. @Override
  31. public String filterType() {
  32. return FilterConstants.POST_TYPE;
  33. }
  34. @Override
  35. public int filterOrder() {
  36. //需要最后一个执行的filter
  37. return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;
  38. }
  39. @Override
  40. public boolean shouldFilter() {
  41. return true;
  42. }
  43. @Override
  44. public Object run() throws ZuulException {
  45. RequestContext requestContext = RequestContext.getCurrentContext();
  46. HttpServletRequest request = requestContext.getRequest();
  47. log.info("Request "{}" spent : {} seconds.", request.getRequestURI(),
  48. (System.currentTimeMillis() - Long.valueOf(requestContext.get("api_request_time").toString())) / 1000);
  49. return null;
  50. }
  51. }
Gateway

</>复制代码

  1. 后续更新---
    做一个好人。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75587.html

相关文章

  • [Spring cloud 步步实现广告系统] 7. 中期总结回顾

    摘要:在前面的过程中,我们创建了个服务发现我们使用作为服务发现组件,学习了的使用。加依赖加注解改配置使用项目三部曲,我们可以快速添加一个新组件,并正常使用这个我没有在项目中实现,但是大家可以和一样,三部曲搞定。 在前面的过程中,我们创建了4个project: 服务发现 我们使用Eureka 作为服务发现组件,学习了Eureka Server,Eureka Client的使用。 Eureka...

    cnsworder 评论0 收藏0
  • [Spring cloud 步步实现广告系统] 6. Service实现&Zuul配置&a

    摘要:所以,没必要过分纠结这种信息,咬文嚼字有时候反而会适得其反。若初通用错误信息异常类请求参数异常用户已存在用户不存在在下面创建一个工具类用来对用户进行加密来获取信息。工具类若初加密参考创建用户的实现,依次实现其他表操作。 DAO层设计实现 这里我们使用Spring DATA JPA来实现数据库操作,当然大家也可以使用Mybatis,都是一样的,我们依然以用户表操作为例: /** * A...

    孙淑建 评论0 收藏0
  • 微服务网关方案调研

    摘要:综述经调研,使用解决方案的占多数,已经能满足绝大多数公司需求。但除了一些超级公司外,比如阿里,京东,他们是自己撸的一套网关。 综述 经调研,使用Spring Cloud Zuul解决方案的占多数,已经能满足绝大多数公司需求。但除了一些超级公司外,比如阿里,京东,他们是自己撸的一套网关。此外,点评直接采用的nginx负载均衡前置网关,而没用第七层网关,原因据说是七层网关会影响性能,但由于...

    Y3G 评论0 收藏0
  • [Spring cloud 步步实现广告系统] 4. 通用代码模块设计

    摘要:对的配置和行为进行定制修改匹配路由请求规则注册自定义的和添加静态资源处理器添加自定义视图控制器添加自定义方法参数处理器配置消息转换器清空所有转换器做一个好人。博客园掘金简书头条知乎 一个大的系统,在代码的复用肯定是必不可少的,它能解决: 统一的响应处理(可以对外提供统一的响应对象包装) showImg(https://segmentfault.com/img/remote/146000...

    since1986 评论0 收藏0
  • [Spring cloud 步步实现广告系统] 8. 检索系统配置&依赖

    摘要:工作流程项目依赖监控面板引入服务调用的组件依赖引入服务消费者的依赖数据库链接依赖工具类集合类操作日志监听解析开源工具类库中的配置相关依赖图片压缩 工作流程 showImg(https://i.loli.net/2019/07/29/5d3ee1829df4d57461.png); 项目依赖 org.springframewo...

    dailybird 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<