当前位置: 首页 > news >正文

腾讯微服务平台TSF学习笔记(二)--如何使用spring cloud zuul实现线上流量复制

需求提了n遍了,好好好,那这个需求就由我测试来做

1.在zuul端配置:
●假设provider-mirror是provider-demo的灰度应用

package com.tencent.tsf.msgw.zuul1.filter;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestTemplate;import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;import org.slf4j.Logger;public class TrafficCopyFilter extends ZuulFilter {private static final Logger LOG = LoggerFactory.getLogger(TrafficCopyFilter.class);private RestTemplate restTemplate = new RestTemplate();@Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 1;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();// 检查请求是否是发送给服务A的if (request.getRequestURI().contains("/provider-demo")) {LOG.info("复制请求到mirror服务");// 将请求复制到服务BString param = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1); // 提取参数String bServiceUrl = "http://svcb host ip:port/echo/" + param; //这里写mirror服务的镜像地址,后期可从配置文件中读入HttpMethod method = HttpMethod.valueOf(request.getMethod());HttpHeaders headers = new HttpHeaders();Enumeration<String> headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()) {String headerName = headerNames.nextElement();headers.add(headerName, request.getHeader(headerName));}HttpEntity<String> entity = new HttpEntity<>(headers);try {restTemplate.exchange(bServiceUrl, method, entity, Void.class);} catch (Exception e) {// 捕获异常,避免影响客户端LOG.error("复制请求到mirror服务失败: {}", e.getMessage());}}return null;}
}

配置类

package com.tencent.tsf.msgw.zuul1.filter;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ZuulConfig {@Beanpublic TrafficCopyFilter trafficCopyFilter() {return new TrafficCopyFilter();}
}

最后,我们会发现,通过zuul请求provider时,流量会被复制到provider-mirror

http://www.lryc.cn/news/241293.html

相关文章:

  • React自定义Hook之useRequest
  • 【LeetCode】挑战100天 Day13(热题+面试经典150题)
  • Android 11.0 SystemUI 去掉状态栏wifi流量上下行图标功能实现
  • 掌握Net User命令:轻松创建、修改、删除和查看本地用户帐户
  • 性能优化中使用Profiler进行页面卡顿的排查及解决方式
  • 深入了解Java8新特性-日期时间API_LocalDate类
  • PyTorch基本操作和工作流程
  • Android开发从0开始(ContentProvider与数据)
  • STM32_6(TIM)
  • Linux中flask项目开启https访问
  • Kubernetes 离线部署 Spinnaker
  • TypeScript 学习笔记 第三部分 贪吃蛇游戏
  • 【spring(一)】核心容器总结
  • 易点易动固定资产管理系统:实现全面的固定资产采购管理
  • 力扣:178. 分数排名(Python3)
  • raid磁盘阵列
  • SpringBoot学习笔记-实现微服务:匹配系统(上)
  • 重磅!全球首个“绿色黑灯工厂”落户中国,竟然是这家企业……
  • go语言学习-异常处理
  • 如何使用 JavaScript 实现图片上传并转换为 LaTeX 公式
  • 深刻理解MySQL8游标处理中not found
  • 甄知燕千云与SAP、EBS、TC、NS等应用深度集成,智能提单一键畅通,效能一键提升
  • 第99步 深度学习图像目标检测:SSDlite建模
  • 用EasyAVFilter将网络文件或者本地文件推送RTMP出去的时候发现CPU占用好高,用的也是vcodec copy呀,什么原因?
  • Vatee万腾科技的独特力量:Vatee数字时代创新的新视野
  • 【JavaSE】基础笔记 - 异常(Exception)
  • QTableWidget——编辑单元格
  • 编译QT Mysql库并集成使用
  • 利用企业被执行人信息查询API保障商业交易安全
  • 【深度学习】P1 深度学习基础框架 - 张量 Tensor