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

wordpress模板 站长腾讯nba新闻

wordpress模板 站长,腾讯nba新闻,廉洁甘孜权威发布,在上海做网站问题 在微服务架构中,一次业务执行完可能需要跨多个服务,这个时候,我们想看到业务完整的日志信息,就要从各个服务中获取,即便是使用了ELK把日志收集到一起,但如果不做处理,也是无法完整把一次业…

问题

在微服务架构中,一次业务执行完可能需要跨多个服务,这个时候,我们想看到业务完整的日志信息,就要从各个服务中获取,即便是使用了ELK把日志收集到一起,但如果不做处理,也是无法完整把一次业务请求的日志完整链路串联起来。有人说,可以在日志中加入某个业务参数,比如订单id等,但是不可能所有业务都是有这样的参数给你用的。

解决方案

在打印日志的时候加入一个可以贯穿整个业务请求的唯一标识,我们把它称traceId。下面是在一个物联网项目的微服务架构中,使用dubbo时的基本流程:
在这里插入图片描述
拿到traceId,该怎么使用呢?答案也很简单,用过logback的都知道,是可以在日志信息里配置一些公共参数的,比如方法名,类名,线程名等,我们把traceId也设置进去就可以了。
logback配置如下:

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%date{yyyy-MM-dd HH:mm:ss} [%-5level]  [%X{traceId}]  [%thread] [%logger{80}] [%file:%line] [%method]>>>>>> %msg%n</pattern><charset>utf-8</charset></encoder>

代码中设置:
web过滤器,针对的是HTTP请求,

@Configuration
public class TraceFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,FilterChain filterChain) throws IOException, ServletException {try {String uuid = UUID.randomUUID().toString();MDC.put("traceId",uuid);filterChain.doFilter(request, response);} finally {// 必须清除MDC.clear();}}
}

跨服务调用走dubbo:
消费者过滤器:

@Activate(group = {CommonConstants.CONSUMER})
public class ConsumerDubboFilter implements org.apache.dubbo.rpc.Filter{@Overridepublic Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {Map<String, Object> attachments = invocation.getObjectAttachments();// 获取traceIdString traceId = MDC.get("traceId");// 传递日志追踪信息attachments.put("traceId",traceId);return invoker.invoke(invocation);}
}

生产者过滤器:

@Activate(group = {CommonConstants.PROVIDER})
public class ProviderDubboFilter implements org.apache.dubbo.rpc.Filter{@Overridepublic Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {try {// 获取到traceIdString traceId = (String)invocation.getObjectAttachment("traceId");// 设置traceIdMDC.put("traceId",traceId);return invoker.invoke(invocation);}finally {// 必须清除MDC.clear();}}
}

有聪明的小伙伴,此时已经想到了一个问题,那就是如果在子线程中打印日志依然是拿不到traceId的,没关系,照样可以解决,子线程传递上下文信息,第一个想到的是什么?对,阿里的TTL,
在pom中引入:

        <dependency><groupId>com.ofpay</groupId><artifactId>logback-mdc-ttl</artifactId><version>1.0.2</version></dependency>

logback的xml配置中加入一行代码:

<contextListener class="com.ofpay.logback.TtlMdcListener"/>

还有伙伴会问,如果用的是OpenFeign呢,其实原理一样,使用OpenFeign的拦截器,在跨服务调用之前拦截,拿到traceId,再放入HTTP请求头中,下游服务在过滤器中再从请求头中获取即可。这里代码就不再展示,直接搜feign的拦截器使用就行了。

扩展

既然traceId可以这样透传,那么其他的一些公共的信息当然也可以透传,比如分页信息,用户信息,ThreadLocal中上下文信息,都可以使用这样的方式去透传,让开发人员感觉还是在单服务中一样简便。

下一篇:MQTT+Disruptor提高并发

http://www.dt0577.cn/news/37334.html

相关文章:

  • 专家库 网站 建设方案百度联系电话多少
  • 昆山网站建设公司怎么样东莞seo建站公司哪家好
  • dedecms转换wordpress方法百度seo课程
  • 企业网站建设中有哪几个重要点营销广告网站
  • 山东省特种作业操作证查询哈尔滨seo推广优化
  • 对网站二次开发的认识宣传推广计划怎么写
  • 合肥哪家公司做网站网络广告销售
  • 淘宝上做微请帖的在哪个网站企业培训课程价格
  • 网页建站需要多少钱毕节地seo
  • 网站悬浮代码网站快速排名上
  • 怎么做电商平台网站优化网络的软件下载
  • 中国万网轻云服务器 如何发布网站seo去哪学
  • 网站优化推广是什么关键词推广优化外包
  • 国外建设工程招聘信息网站怎么在百度上推广自己的公司信息
  • 南京网站优化推广代理登录页面
  • 找客源免费用哪个软件好江西seo推广
  • 淘宝网网站建设的的意见女教师遭网课入侵直播
  • 长沙的网站建设公司青岛seo关键词排名
  • 漳州网站建设哪家最正规销售网络平台
  • 如何建设社区网站网站搜索排名优化怎么做
  • 衡水网站建设地方企业营销案例
  • 做网站要在vs安装什么优化网站性能监测
  • 怎么促成客户做网站如何制作小程序
  • 港口建设费申报网站seo线下培训机构
  • 做资源网站违法吗免费发帖论坛大全
  • 高级web程序设计——asp.net网站开发课后答案百度智能建站系统
  • 视频网站咋么做网站交易网
  • 什么类型的网站容易做南宁百度seo排名公司
  • 企业组织架构图关键词优化公司
  • 犀牛网站建设深圳专业seo