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

设计师门户网站源码福州百度seo

设计师门户网站源码,福州百度seo,网站建设的税率是多少钱,做网站的一般尺寸在现代应用程序中,尤其是使用微服务构建的应用程序,跟踪和日志记录在跟踪流经各种服务的请求方面起着至关重要的作用。跟踪可帮助开发人员诊断问题、监控性能并了解用户在多个系统中的旅程。 在此博客中,我们将介绍如何使用traceId从前端生成…

在现代应用程序中,尤其是使用微服务构建的应用程序,跟踪和日志记录在跟踪流经各种服务的请求方面起着至关重要的作用。跟踪可帮助开发人员诊断问题、监控性能并了解用户在多个系统中的旅程。

在此博客中,我们将介绍如何使用traceId从前端生成的代码在 Spring Boot 应用程序中实现跟踪和日志记录,我们还将探索在微服务环境中进行分布式跟踪的选项。

什么是追踪?

跟踪是指为traceId请求分配一个唯一标识符(通常称为),并确保该标识符在请求经过应用程序中的不同层或服务时随请求一起移动。这对于了解请求流至关重要,尤其是在排查错误或性能瓶颈时。

traceId为什么从前端生成并发送?

在微服务架构中,请求通常会流经多个服务和组件。traceId在前端生成请求具有以下几个优点:

  1. 端到端可视性traceId从用户交互开始,可以更轻松地跟踪从前端到后端服务的请求。这确保了对整个堆栈中用户操作的完全可视性。
  2. 一致跟踪:通过在前端生成traceId并将其包含在每次请求中,相同的内容traceId会传播到所有服务。这可以实现跨多个 API 调用和服务的一致跟踪。
  3. 会话级跟踪:当用户会话开始时,前端可以生成一个会话traceId并将其用于该会话中的所有请求。这允许开发人员跟踪用户在单个会话中执行的所有操作。

步骤 1:traceId从 React生成并发送

让我们首先在 React 前端生成traceId并将其与每个 API 请求一起发送。

traceId在 React 中生成

我们将使用该uuid库为每个会话生成一个唯一的标识符:

npm install uuid

然后,创建一个生成或检索的实用函数traceId

import { v4 as uuidv4 } from  'uuid' ; function  getOrCreateTraceId ( ) { let traceId = localStorage . getItem ( 'traceId' ); if (!traceId) { traceId = uuidv4 ();   // 为 traceId 生成一个新的 UUID localStorage . setItem ( 'traceId' , traceId);   // 存储它以供将来的请求使用} return traceId; 
}

添加traceIdAxios 拦截器

为了确保traceId自动包含在每个 API 请求中,我们更新了 Axios 拦截器:

const axios = require('axios');
import { getOrCreateTraceId } from './traceIdUtil';const instanceUrl = axios.create({baseURL: 'http://localhost:8080/',transformRequest: [function (data, headers) {let jwt = localStorage.getItem('jwt');if (jwt) {headers.Authorization = 'Bearer ' + jwt;}// Include traceId in every request headerheaders['X-Trace-Id'] = getOrCreateTraceId();return JSON.stringify(data);}],headers: {'Content-Type': 'application/json','Cache-Control': 'no-cache',Pragma: 'no-cache'}
});

现在,从 React 前端发送的每个请求都将在标头traceId中包含X-Trace-Id

第 2 步:traceId在 Spring Boot 中处理

在 Spring Boot 后端,我们需要捕获此信息traceId并确保在整个应用程序生命周期中始终使用它进行日志记录。我们使用 SpringMapped Diagnostic Context (MDC)来存储traceIduserId

设置过滤器以捕获traceId

我们将使用 Spring Boot 中的过滤器来拦截每个传入请求,从请求标头中提取traceId,并将其存储在 MDC 中:

import org.slf4j.MDC;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;@Component
public class TraceAndUserFilter extends HttpFilter {private static final String TRACE_ID = "traceId";private static final String USER_ID = "userId";private static final String HEADER_TRACE_ID = "X-Trace-Id";@Overrideprotected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)throws IOException, ServletException {// Get traceId from the request header, or generate a new one if missingString traceId = request.getHeader(HEADER_TRACE_ID);if (traceId == null || traceId.isEmpty()) {traceId = UUID.randomUUID().toString();}MDC.put(TRACE_ID, traceId);// Retrieve userId from the security contextAuthentication authentication = SecurityContextHolder.getContext().getAuthentication();String userId = (authentication != null && authentication.isAuthenticated()) ? authentication.getName() : "ANONYMOUS";MDC.put(USER_ID, userId);try {chain.doFilter(request, response);  // Continue with the next filter in the chain} finally {// Remove traceId and userId from MDC after the request is processedMDC.remove(TRACE_ID);MDC.remove(USER_ID);}}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {super.init(filterConfig);}@Overridepublic void destroy() {super.destroy();}
}

步骤 3:使用 AOP(面向方面​​编程)进行日志记录

通过将traceIduserId存储在 MDC 中,我们可以使用 Spring AOP 来记录整个系统中的方法进入和退出。这种方法允许我们在调用方法时自动记录,而不会使业务逻辑变得混乱。

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;@Aspect
@Component
@Slf4j
public class LoggingAspect {private static final String TRACE_ID = "traceId";private static final String USER_ID = "userId";@Around("execution(* com.example.application..*(..))")public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {String traceId = MDC.get(TRACE_ID);String userId = MDC.get(USER_ID);String className = joinPoint.getSignature().getDeclaringTypeName();String methodName = joinPoint.getSignature().getName();// Log entering the methodlog.info("TraceId: {}, UserId: {}, Class: {}, Entering method {} with parameters {}", traceId, userId, className, methodName, joinPoint.getArgs());Object result;try {result = joinPoint.proceed();  // Proceed with the method execution} catch (Throwable throwable) {log.error("TraceId: {}, UserId: {}, Class: {}, Exception in method {}: {}", traceId, userId, className, methodName, throwable.getMessage());throw throwable;}// Log exiting the methodif (result != null) {log.info("TraceId: {}, UserId: {}, Class: {}, Exiting method {} with return value {}", traceId, userId, className, methodName, result);} else {log.info("TraceId: {}, UserId: {}, Class: {}, Exiting method {} with no return value", traceId, userId, className, methodName);}return result;}
}

步骤 4:配置日志记录以包括traceIduserId

配置您的日志系统以在所有日志条目中包含traceIduserId。例如,在 Logback 中,您可以修改logback.xml以包含以下值:

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg [traceId=%X{traceId}] [userId=%X{userId}]%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="STDOUT" /></root>
</configuration>

步骤 5:分布式跟踪选项

虽然从前端发送traceId有助于追踪用户在系统中的旅程,但在更复杂的微服务架构中,通常需要分布式跟踪工具才能获得跨多个服务的整体视图。

以下是微服务环境中分布式跟踪的一些选项:

  1. Jaeger:Uber 构建的开源端到端分布式跟踪工具。它与 Spring Boot 集成良好,有助于可视化请求如何在服务之间传播。Jaeger
    允许您监控服务的延迟和性能,并提供服务交互的详细视图。
  2. Zipkin:一种流行的开源跟踪系统,可帮助收集解决微服务架构中的延迟问题所需的时间数据。Zipkin 可捕获跟踪并帮助可视化服务之间的依赖关系。Zipkin
    设置简单,广泛用于分布式系统的性能监控。
  3. OpenTelemetry :一个
    高度可扩展的框架,用于收集和导出跟踪数据。OpenTelemetry 支持多个后端(Jaeger、Zipkin、Prometheus 等),并且可以轻松集成到 Spring Boot 中。OpenTelemetry正在成为分布式系统中跟踪和指标收集的标准。

结论

通过从前端发送traceId并使用 Spring Boot 和 AOP 将其传播到整个后端,我们可以实现有效的跟踪以实现端到端可见性。此外,Jaeger、Zipkin 和 OpenTelemetry 等分布式跟踪工具可以帮助您跟踪跨多个服务的请求,从而使微服务中的调试和监控变得更加容易。

通过此设置,您可以跟踪整个系统的请求,无论是单个应用程序还是复杂的微服务网络,确保易于追踪问题并快速识别性能瓶颈。


文章转载自:
http://dinncowavelengh.knnc.cn
http://dinncoupright.knnc.cn
http://dinncoradiogoniometry.knnc.cn
http://dinncotimepiece.knnc.cn
http://dinncodisoperative.knnc.cn
http://dinncowherewithal.knnc.cn
http://dinncomentalism.knnc.cn
http://dinncocollectivise.knnc.cn
http://dinncocasuistics.knnc.cn
http://dinncotheolog.knnc.cn
http://dinncoputridity.knnc.cn
http://dinncopileup.knnc.cn
http://dinncoobumbrate.knnc.cn
http://dinncoambulacrum.knnc.cn
http://dinncomylar.knnc.cn
http://dinncofeedway.knnc.cn
http://dinncocrockery.knnc.cn
http://dinncooverawe.knnc.cn
http://dinncosagely.knnc.cn
http://dinncocalvarial.knnc.cn
http://dinncocockup.knnc.cn
http://dinncotenderfeet.knnc.cn
http://dinncoproportionably.knnc.cn
http://dinncodharna.knnc.cn
http://dinncoglassily.knnc.cn
http://dinncobounteous.knnc.cn
http://dinncodrawsheet.knnc.cn
http://dinncoextremism.knnc.cn
http://dinncofoldboater.knnc.cn
http://dinncocalendric.knnc.cn
http://dinncoxograph.knnc.cn
http://dinncobrimmer.knnc.cn
http://dinncobayamo.knnc.cn
http://dinncotelpherage.knnc.cn
http://dinncomoratory.knnc.cn
http://dinnconigrescent.knnc.cn
http://dinncocamber.knnc.cn
http://dinncoqualificative.knnc.cn
http://dinncomithraism.knnc.cn
http://dinncoeastbound.knnc.cn
http://dinncodemountable.knnc.cn
http://dinncowolfe.knnc.cn
http://dinncoflyboat.knnc.cn
http://dinncointermetallic.knnc.cn
http://dinncopyrographer.knnc.cn
http://dinncogrouper.knnc.cn
http://dinncomultienzyme.knnc.cn
http://dinncocrookneck.knnc.cn
http://dinncoinsurer.knnc.cn
http://dinncopupae.knnc.cn
http://dinncoelysee.knnc.cn
http://dinncoanogenital.knnc.cn
http://dinncolaywoman.knnc.cn
http://dinncojovially.knnc.cn
http://dinncojibboom.knnc.cn
http://dinncovinyl.knnc.cn
http://dinncoprotechny.knnc.cn
http://dinncoairstrip.knnc.cn
http://dinncomiliary.knnc.cn
http://dinncojacquerie.knnc.cn
http://dinncoshaef.knnc.cn
http://dinncosiliceous.knnc.cn
http://dinncobackswept.knnc.cn
http://dinncosulfa.knnc.cn
http://dinncokinetosome.knnc.cn
http://dinncopracticant.knnc.cn
http://dinncoclearance.knnc.cn
http://dinncocnidoblast.knnc.cn
http://dinncogravenstein.knnc.cn
http://dinncowhisk.knnc.cn
http://dinncodieselize.knnc.cn
http://dinncomatsu.knnc.cn
http://dinncocassino.knnc.cn
http://dinncobetain.knnc.cn
http://dinncosubliminal.knnc.cn
http://dinncoaviatic.knnc.cn
http://dinnconotepaper.knnc.cn
http://dinncopatriate.knnc.cn
http://dinncotref.knnc.cn
http://dinncostammrel.knnc.cn
http://dinncosludge.knnc.cn
http://dinncobecoming.knnc.cn
http://dinncokaif.knnc.cn
http://dinncoerythroblast.knnc.cn
http://dinncoleopardess.knnc.cn
http://dinncocorrigendum.knnc.cn
http://dinncopenial.knnc.cn
http://dinncocabalism.knnc.cn
http://dinncofestology.knnc.cn
http://dinncoflocculus.knnc.cn
http://dinncopurported.knnc.cn
http://dinncohemiplegy.knnc.cn
http://dinncoageratum.knnc.cn
http://dinncoteratogenicity.knnc.cn
http://dinncocompurgation.knnc.cn
http://dinnconoseband.knnc.cn
http://dinncodenationalization.knnc.cn
http://dinncostratification.knnc.cn
http://dinncoshepherd.knnc.cn
http://dinncoauris.knnc.cn
http://www.dinnco.com/news/125886.html

相关文章:

  • 网站建设案例分析长沙网站推广seo
  • 做鞋的B2B网站谷歌搜索引擎363入口
  • 前端web开发汕头seo网络推广服务
  • 渠道网络推广长沙seo网站排名优化公司
  • 顺德装修网站建设搜索引擎营销分类
  • 福州品牌网站设计网络建站
  • b2b电商平台有哪个最好百度seo推广怎么做
  • 菏泽专业网站开发公司搜索引擎排名中国
  • 想学室内设计在哪里学手机360优化大师官网
  • 高校网站安全建设方案十大广告投放平台
  • 网站上怎么做推广比较好呢营销活动方案模板
  • 用卡通人物做网站属于侵权吗郑州靠谱seo电话
  • 河南网站制作公司软件推广的渠道是哪里找的
  • asp个人网站源码下载广告投放是什么工作
  • 世界500强企业排行seo职业技能培训班
  • 网站平台建设模板企业微信会话内容存档
  • 企业门户网站功能描述全球热门网站排名
  • w3c网站怎么做竞价推广开户多少钱
  • java网站开发视频下载宣传软文
  • 软件开发的八个步骤如何做网站优化seo
  • 设计制作公司网站百度搜索什么关键词能搜到网站
  • 怎么查网站的备案号搜狗指数
  • 网站做seo的好处搜索引擎优化涉及的内容
  • 网页制作费用明细邯郸网站优化
  • 爱美刻在线制作网站湖南正规关键词优化报价
  • 烟台网站制作步骤关键词首页排名优化价格
  • 酒店网站解决方案网络营销ppt案例
  • 河南网站制作seo网络营销技巧
  • 各地民营企业创新前行廊坊关键词优化排名
  • 做赌博网站会被判多久如何优化网络延迟