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

简述网站一般建设的流程图高清做 视频在线观看网站

简述网站一般建设的流程图,高清做 视频在线观看网站,下载安装注册app,抖音开放平台文章目录 一、背景调用路径部署环境问题 二、方案三、Demo示例1、MDC2、RequestInterceptor3、HandlerInterceptor4、logback.xml 四、后续改进思路 一、背景 首先这个项目属于小型项目#xff0c;由于人手以及时间限制#xff0c;并未引入Skywalking等中间件来做调用链路追… 文章目录 一、背景调用路径部署环境问题 二、方案三、Demo示例1、MDC2、RequestInterceptor3、HandlerInterceptor4、logback.xml 四、后续改进思路 一、背景 首先这个项目属于小型项目由于人手以及时间限制并未引入Skywalking等中间件来做调用链路追踪。Skywalking不在此次的讨论范围中。 其次介绍一下项目的相关背景 调用路径 项目中主要有两种调用路径 Web请求走统一的网关入口调用后端服务XXL-JOB定时任务执行调度 部署环境 Kubernetes 问题 走统一网关入口的请求不用担心在网关那边加了TraceID但是XXL-JOB由于是自动注册且部署环境是在K8S内XXL-JOB获取到的是Pod的IP网关并未拦截到。 由于项目的逻辑较为复杂XXL-JOB的调度任务属于其中比较重要的一块对于前期开发的调试以及后期问题的确认加上TraceID是非常有必要的。 二、方案 首先确认是的XXLJOB执行定时任务时JobHandler没有TraceID不考虑使用中间件的话就只有两种方案了。 一种是改造XXL-JOB源码在发起请求中添加TraceID另一种则是在后端服务拦截到XXL-JOB的请求在入口添加TraceID。 XXL-JOB的源码没有具体研究过之前只是做过适配Oracle改造起来有一定难度所以最后采用的方案还是在后端服务拦截请求添加TraceID。 在网上搜索了一下相关资料发现实现起来还是比较简单的一般都是通过spring aop的方式在Slf4j的MDC中添加TraceID。 在这里简单介绍下MDC之前我也没做过更多了解。 MDCMapped Diagnostic Context映射调试上下文是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。某些应用程序采用多线程的方式来处理多个用户的请求。 MDC 可以看成是一个与当前线程绑定的哈希表可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问当需要记录日志时只需要从 MDC 中获取所需的信息即可。 其实就是使用ThreadLocal来存储而由于请求到Java后端服务时Tomcat会分配一个线程直至请求结束这样就会保证我们在入口添加的TraceID会传递到整条链路。 但是使用MDC调用存在两个问题 子线程中日志TraceID丢失 跨服务调用日志TraceID丢失 同时项目中使用了Openfeign在发起端使用 RequestInterceptor 来拦截添加TraceID然后在接收端使用 HandlerInterceptor 拦截。 即最终方案是 MDCRequestInterceptorHandlerInterceptor 整体的调用链路如下 暂时无法在飞书文档外展示此内容 三、Demo示例 1、MDC Aspect Component Slf4j public class XxlJobAopConfig {Before(annotation(com.xxl.job.core.handler.annotation.XxlJob))public void beforeMethod() {MDC.put(traceId,UUID.randomUUID().toString().toLowerCase());} }2、RequestInterceptor Configuration public class FeignRequestInterceptor implements RequestInterceptor {Overridepublic void apply(RequestTemplate template) {template.header(traceId, MDC.get(HeaderExtraInfoConstants.traceId));} }FeignClient(name test, url xxx, configuration FeignRequestInterceptor.class)3、HandlerInterceptor Slf4j Component public class HeaderInterceptor implements HandlerInterceptor {Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception arg3) {MDC.remove(traceId);}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView arg3) {}Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {String traceId request.getHeader(HeaderExtraInfoConstants.traceId);if (StringUtils.isEmpty(traceId)) {MDC.put(traceId, UUID.randomUUID().toString().toLowerCase());} else {MDC.put(traceId, traceId);}return true;}}Configuration public class InterceptorConfiguration extends WebMvcConfigurationSupport {Overrideprotected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new HeaderInterceptor()).addPathPatterns(/**);} }4、logback.xml %d{yyyy-MM-dd HH:mm:ss.SSS} --- [%X{traceId}] --- [%thread] --- %-5level %logger{50} - %msg%n四、后续改进思路 上述方案有较大的局限性只适用于服务间通过feign调用的方式如果有其他如okhttp的方式需要再添加拦截器。对于多线程的问题也并未解决常见的方式是通过重写线程池来解决。 丰富调用场景添加拦截器 重写线程池 由于部署在K8S集群可启用Istio进行服务治理
http://www.ihoyoo.com/news/54988.html

相关文章:

  • 哪些网站做商标注册本地wordpress如何传到服务器上
  • 温州企业做网站外贸建站seo优化
  • 制作免费的网站wordpress post class
  • 建免费的网站做ppt的软件模板下载网站
  • 响应式网站断点浏览器怎样屏蔽网站
  • 网站开发财务成都网页设计美工培训
  • 德邦物流公司现代物流网站建设与开发海外高端网站建设
  • 网站 建设网站建立电话
  • 建设银行官方网站登录网址买了域名后怎么建网站
  • 网站建设与网络设计课程王野天津广播
  • 做推广都有什么网站企业管理系统软件下载
  • 德州做网站建设的公司哪家好wordpress做微博
  • 营销型网站建站教程什么是网络营销渠道中最重要的中间商
  • 北京免费发布企业信息网站三合一网站管理系统怎么做的
  • 伍佰亿官方网站石家庄搜索引擎优化公司
  • 温州做网站设计容城县建设银行网站
  • 中国住房和城乡建设部招标网站重庆网站营销案例
  • 用dw做购物网站wordpress比价插件
  • 东莞网站开发wordpress支付宝收款
  • 泰安网站建设总结上海企业信用信息公示系统(上海)
  • 公司网站能否申请国外免费空间wordpress 待审文章
  • 汕尾东莞网站建设体育馆路网站建设
  • zencart外贸网站建设如何购买服务器
  • 做网站需要编码吗百度热门搜索排行榜
  • 搭建一个电商网站需要多少费用聊城医院网站建设
  • 深圳做网站要多少网站配图尺寸
  • 专为中年人做的的婚恋网站广州网站建设哪家公司
  • 广东民航机场建设有限公司网站北京天通苑网站建设
  • 手机彩票网站开发影视传媒网站源码
  • 地铁网站建设特点怎么搞一个网站