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

网站上的图用美图秀秀做可以吗佛山个性化网站搭建

网站上的图用美图秀秀做可以吗,佛山个性化网站搭建,上海十大公司排名,中信建设有限责任公司总部在哪问题 在微服务架构中,一次业务执行完可能需要跨多个服务,这个时候,我们想看到业务完整的日志信息,就要从各个服务中获取,即便是使用了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.yayakq.cn/news/138971/

相关文章:

  • 刚做的网站 搜不到周口建设企业网站公司
  • 信誉好的昆明网站建设行业类网站模板
  • 网站定制开发哪家厉害python做笔记的网站
  • 系统 网站开发工程师帮别人起名 做ppt的网站
  • 上海个人医疗网站备案软件工程师招聘
  • 网站制作开发策划seo网站优化插件
  • 没有域名怎么搭建网站核心关键词
  • 建立企业网站方案qq空间破解版免费下载
  • 手机门户网站it培训网站
  • 网站开发包括网站的在线翻墙
  • 宁波海曙区建设局网站响应式网站茶叶网站
  • 免费建站哪个比较好wordpress查看数据库密码
  • 辰景青岛网站建设网站引量方法
  • vip广告网站建设台市住房和城乡建设局网站
  • 微商平台都有哪些杭州网站优化
  • 网站备案资料 下载一起做网店货源
  • 辽宁省建设厅网站怎样下载表格低价网站开发
  • 网站建设推广销售话术企业网站空间域名
  • 网站导航栏如何优化直播网站开发公司
  • 毕节市建设厅网站网站开发与
  • flash网站优缺点成都网站建设_创新互联
  • 模板建站平台安康创宇网站建设
  • 公司网站域名更改怎么做全新网站如何做百度竞价
  • 怎样做网商网站wordpress繁体中文
  • 哪个网站可以接项目做安装wordpress出现乱码
  • 珠海做网站公司哪家好wordpress怎么备份按在
  • 好优化网站设计51一起做网站
  • 项目计划书模板word珠海优化seo
  • 邢台建设网站ui设计师的发展前景
  • 建设银行官网首页网站大连企业需要做网站