Apollo OpenTracing 项目教程
1. 项目的目录结构及介绍
Apollo OpenTracing 项目的目录结构如下:
apollo-opentracing/
├── src/
│ ├── index.js
│ ├── apollo-opentracing.js
│ ├── context.js
│ ├── plugins/
│ │ ├── apollo-server-plugin-base.js
│ │ ├── apollo-server-plugin-tracing.js
│ ├── utils/
│ │ ├── constants.js
│ │ ├── logger.js
├── package.json
├── README.md
目录结构介绍
src/
:包含项目的主要源代码。index.js
:项目的入口文件。apollo-opentracing.js
:主要功能实现文件。context.js
:上下文管理文件。plugins/
:插件相关文件。apollo-server-plugin-base.js
:基础插件文件。apollo-server-plugin-tracing.js
:追踪插件文件。
utils/
:工具类文件。constants.js
:常量定义文件。logger.js
:日志工具文件。
package.json
:项目的依赖管理文件。README.md
:项目说明文档。
2. 项目的启动文件介绍
项目的启动文件是 src/index.js
。该文件主要负责初始化 Apollo Server 并集成 OpenTracing 插件。
启动文件代码示例
const { ApolloServer } = require('apollo-server');
const { ApolloOpenTracing } = require('./apollo-opentracing');
const typeDefs = require('./schema');
const resolvers = require('./resolvers');
const server = new ApolloServer({
typeDefs,
resolvers,
plugins: [
ApolloOpenTracing({
tracingEnabled: true,
tracingConfig: {
serviceName: 'apollo-server',
sampler: new ConstSampler(true),
},
}),
],
});
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
启动文件介绍
- 引入
apollo-server
和apollo-opentracing
模块。 - 定义 GraphQL 的
typeDefs
和resolvers
。 - 创建
ApolloServer
实例,并配置ApolloOpenTracing
插件。 - 启动服务器并监听端口。
3. 项目的配置文件介绍
项目的配置文件主要是 package.json
和 src/apollo-opentracing.js
。
package.json
package.json
文件包含了项目的依赖、脚本命令等信息。
{
"name": "apollo-opentracing",
"version": "1.0.0",
"description": "OpenTracing support for Apollo Server",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js"
},
"dependencies": {
"apollo-server": "^3.0.0",
"opentracing": "^0.14.4"
},
"devDependencies": {
"eslint": "^7.0.0"
}
}
apollo-opentracing.js
src/apollo-opentracing.js
文件包含了 OpenTracing 插件的配置和实现。
const { Tracer, ExplicitContext, ConsoleLogger, ConstSampler } = require('opentracing');
class ApolloOpenTracing {
constructor(options) {
this.tracingEnabled = options.tracingEnabled;
this.tracingConfig = options.tracingConfig;
this.tracer = new Tracer(
new ExplicitContext(),
new ConsoleLogger(),
new ConstSampler(true),
this.tracingConfig.serviceName
);
}
requestDidStart() {
return {
willSendResponse(requestContext) {
if (this.tracingEnabled) {
const span = this.