npm 包 @opencensus/propagation-b3 使用教程

在现代的分布式系统中,如何追踪一个请求从头至尾的过程是一个极为重要的问题。在处理一个 HTTP 请求或者 RPC 调用时,通常需要在各个组件中传递一些上下文信息,例如请求头中的 Trace ID 和 Span ID。这样就能够在整个分布式系统中追踪到这个请求的状态,并且能够定位问题。

@opencensus/propagation-b3 是一个 npm 包,旨在提供一种 Trace Context 的传输格式,使得开发者能够在各个组件中传递 Trace ID 和 Span ID 等上下文信息。该包是基于 OpenTracing 规范的,符合了 OpenTelemetry 规范。本文将为您介绍如何使用 @opencensus/propagation-b3 包进行上下文信息的传递。

安装

@opencensus/propagation-b3 可以通过 npm 安装。在您的 Node.js 项目中,使用以下指令即可安装该包:

--- ------- --------------------------

集成

Express 中间件

在 Express 应用中使用该包比较简单,只需要编写一个中间件就能实现上下文信息的传递。下面是一个简单的示例,我们假设在请求头中有键为 x-b3-traceidx-b3-spanid 的 Trace ID 和 Span ID。这时候,我们可以通过以下代码实现上下文信息的传递:

----- ----------- - --------------------------------------

-- -- ----- ------- -----
----- ------ - ---------------------------- -- -
  ------ ---------------------
---

-- -- ------- ---
-------- ------------------------ ---- ----- -
  -- ------- ----- ------- --
  ----- ------------ - ----------------------------
  -- - ----- ------- --- ------------- -----
  ----- ------- - --- ------------------------------------------------------------------------------ -
    ------------
  -------------
  -- - ------------- -------- --- -------------
  ----------- - --------
  -------
-

在上述代码中,我们使用 @opencensus/propagation-b3extract 方法创建了一个 Trace Context 传递器实例。在 Express 中间件中的 extractTraceContext 方法中,我们通过 tracer.extract(req.headers) 方法从请求头中提取出 Trace Context 信息,并将其转化为 OpenTelemetry 上下文对象。然后,我们将该上下文对象保存到了 req.context 上下文变量中,以便后续进行使用。

使用 Express 中间件之后,我们可以在每个路由处理函数中使用 req.context 上下文对象。例如:

------------ -------------------- ----- ---- -- -
  ----- ---- - ------------------------------
  ---------------------------------
  ---------------- ---------
---

在上述代码中,我们首先使用了 extractTraceContext 中间件,目的是获取上下文信息并将其保存到 req.context 上下文变量中。接着,我们在路由处理函数中获取 req.context 上下文对象,并使用 ot.trace.getSpan 方法获取当前 span 对象。此时,我们可以使用 span 对象的 API 进行日志记录或下游操作,如 span.addEvent 方法添加自定义事件等。

微服务

在微服务中,我们可能需要将请求传递给其他微服务进行处理。在这种情况下,我们需要对上下文信息进行传递。下面是一个简单的示例,我们假设请求要调用微服务 foo-service 进行处理。这时候,我们可以通过以下代码实现上下文信息的传递:

----- ----------- - --------------------------------------
----- ---- - -------------------------
----- ----------- - ------------------------------
----- --------- - ----------------------------------------- ----------------- -
  --------- -----
  ------ -------
  ------ -------
  --------- -----
  ------- ----
---

-- -- ----- ------- -----
----- ------ - ---------------------------- -- -
  ------ ---------------------
---

-------- ---------------- -
  -- -- ---- ---
  ----- ----------- - ----------------------------------
  ----- ------ - --- --------------------------------------- ------------ -
    --------------- -----------------------
  ---

  -- --------- ----- ------- --------
  ----- ------------------ - --- ----------------------------- -
    ------ ---------- --------- ----- -- -
      ----- ------- - ----------------------------------
      ----------------------------------------
      -------------- ----------
    -
  ---

  -- -------- ---- ---
  ------ -------------------
-

-------- ----- -
  ----- ------ - -----------------
  ---------------------- ----- ---- -- -
    -- ---
  ---
-

在上述代码中,我们首先使用 @grpc/proto-loader 模块加载 proto 文件。接着,我们创建了一个 Trace Context 传递器实例,并实现了一个 gRPC 拦截器。在拦截器中,我们使用 tracer.extract(metadata.getMap()) 方法从 gRPC 请求中提取 Trace Context 信息,并使用 tracer.inject(context) 方法将 Trace Context 信息注入到新的 gRPC 请求中。

总结

本文介绍了如何使用 npm 包 @opencensus/propagation-b3 对 Trace Context 进行传输。在 Express 应用中,我们可以通过一个中间件轻松地将上下文信息注入到请求中;在微服务中,我们需要使用 gRPC 拦截器将上下文信息注入到请求中。通过阅读本文,您应该可以掌握 @opencensus/propagation-b3 包的基本使用方法了。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5f104f54403f2923b035c233


猜你喜欢

  • npm 包 stylelint-config-property-sort-order-smacss 使用教程

    在前端开发中,CSS 代码规范是非常重要的一部分。其中,CSS 属性的顺序也很重要,可以提高代码的可读性和维护性。为了让开发者更方便地进行 CSS 属性的排序,有一款名为 stylelint-conf...

    4 年前
  • npm 包 @sweetalert2/stylelint-config 使用教程

    什么是 @sweetalert2/stylelint-config? @sweetalert2/stylelint-config 是一个样式检查工具 StyleLint 的配置包。

    4 年前
  • npm 包 @types/protractor 使用教程

    前言 Protractor 是一个基于 Selenium Webdriver 的端到端测试框架,它允许测试人员编写自动化测试脚本并且可以在 Web 应用上运行这些脚本。

    4 年前
  • npm 包 @types/react-tether 使用教程

    在前端开发中,使用一些优秀的第三方库可以大大提升开发效率,其中的一个必不可少的是 React,而 react-tether 是一个非常实用的库,它可以创建一个包裹在 Tether 组件中的 React...

    4 年前
  • npm 包 @types/react-timeout 使用教程

    介绍 在前端开发中,有时我们需要使用 setTimeout 或者 setInterval 来执行一些定时任务。在 React 中,除了可以使用浏览器原生的定时方法之外,还可以使用库 react-tim...

    4 年前
  • npm 包 @types/react-toastify 使用教程

    简介 npm(node package manager)是 Node.js 世界中最流行的软件包管理器,它允许您轻松安装、更新和删除 Node.js 应用程序的依赖项。

    4 年前
  • npm 包 @types/react-toggle 使用教程

    React Toggle 是一个非常方便的库,用于创建开/关按钮。如果你正在使用 React,你可能已经使用了它。它是一个非常流行的库,已经被许多人广泛地使用。但是,当我们使用 TypeScript ...

    4 年前
  • npm包@types/react-touch使用教程

    在React开发中,使用触控事件是非常常见的。而在使用触控事件时,@types/react-touch是一个非常好用的npm包,它可以方便地对触控事件进行类型定义,以提高代码的可读性和可维护性。

    4 年前
  • npm 包 @types/react-tracking 使用教程

    前言 在我们开发 React 应用的时候,有时候会需要集成第三方的跟踪服务,例如 Google Analytics、Mixpanel 等等。这时候,我们需要在项目中引入对应的跟踪代码,并且将对应的事件...

    4 年前
  • npm 包 @types/react-treeview 使用教程

    react-treeview 是一个 React 项目中常用的树形结构组件,可以用于展示具有父子级关系的数据。在使用这个组件时,为了让 IDE 能够正确地解析它的类型定义,我们需要安装 @types/...

    4 年前
  • npm 包 @types/react-twitter-auth 使用教程

    简介 @types/react-twitter-auth 是一个类型定义包,为使用 react-twitter-auth 提供了 TypeScript 的支持。 安装 要使用 @types/react...

    4 年前
  • npm 包 @types/react-user-tour 使用教程

    简介 前端界面引导是一种常见的功能,在 React 的世界里,我们可以使用 npm 包 @types/react-user-tour 来实现一个简单的用户引导。 @types/react-user-t...

    4 年前
  • npm 包 @types/virtual-keyboard 使用教程

    简介 @types/virtual-keyboard 是一款在 Web 前端开发中常用的虚拟键盘开发工具。它可以让我们在前端页面中快速集成基于键盘的用户输入方式。本文将深入学习 @types/virt...

    4 年前
  • npm 包 @types/react-virtual-keyboard 使用教程

    在现代 Web 前端开发中,使用外部库或第三方工具可以大大提高我们的开发效率和代码质量。而 npm 作为最大的 JavaScript 包管理器,已经成为了前端开发的必备工具之一。

    4 年前
  • npm 包 @types/react- virtualized-select 使用教程

    前言 在前端开发中,我们常常会使用到一些第三方库和插件来提高我们的开发效率和代码复用性。而在使用这些插件时,我们可能会遇到类型定义不明确的问题,无法对插件的代码进行完善的类型检查。

    4 年前
  • npm 包 react-webcam 使用教程

    React-webcam 是一个基于 React 的 webcam 模块,提供了各种功能,支持多种平台和设备,例如浏览器和电脑摄像头、手机摄像头等,被广泛用于包括视频录制、视频聊天、人脸识别等应用场景...

    4 年前
  • npm 包 @types/react-webcam 使用教程

    如果你正在开发一个基于 React 的 Web 应用程序,并需要使用摄像头或者视频录制的功能,那么 @types/react-webcam 这个 npm 包可能会帮到你。

    4 年前
  • npm 包 @types/react-weui 使用教程

    随着 React 技术的普及,React UI 组件库也不断涌现。其中,React-WeUI 是一个基于 WeUI 为样式基础的 React 组件库,拥有完整的组件体系和良好的可定制性,深受广大前端开...

    4 年前
  • npm 包 @types/react-widgets 使用教程

    在前端开发中,React 是非常流行的框架。而 React-widgets 则是一个专门为 React 开发的高质量UI组件集合,包含了日历、下拉框、多选框、数字输入框等等多个组件,可有效加速前端开发...

    4 年前
  • npm 包 @types/react-widgets-moment 使用教程

    React-widgets-moment 是一个基于 React 的日期选择器组件。若要在 TypeScript 项目中使用该组件,需要安装相关的类型定义文件。而 @types/react-widge...

    4 年前

相关推荐

    暂无文章