# 毕业设计-链路追踪 **Repository Path**: sishen007/graduation-project-tracking ## Basic Information - **Project Name**: 毕业设计-链路追踪 - **Description**: graduation-project链路追踪 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-04-30 - **Last Updated**: 2022-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式链路追踪 #### 介绍 graduation-project微服务分布式链路追踪 #### 软件架构 1. 整体框架采用SpringCloud 2. 定义四个微服务: - zst-service-demo01:8001 - 作为入口:提供获取用户信息(/zst/demo1/get-user-info) - zst-service-demo02:8002 - 提供用户信息(/zst/demo2/get-user-base) - zst-service-demo03:8003 - 提供角色信息(/zst/demo3/get-role) - zst-service-demo04:8004 - 提供权限信息(/zst/demo4/get-permission) 3. 微服务间注册发现:Nacos 4. 微服务间调用:Feign 5. 微服务间链路追踪:使用Sleuth或自己开发 6. 简单业务:集成Mysql数据库、Mybatis-plus增强开发 7. 调用期间日志打印:log4j日志框架 #### 架构图流程 > 详见:https://www.processon.com/view/link/626ca06ef346fb6712ade79b > > 会在项目开发过程中逐步完善 ##### 测试链路一 1. 服务调用:zst-service-demo01 -> zst-service-demo02 -> zst-service-demo03 -> zst-service-demo04、 2. 接口请求:http://localhost:8001/zst/demo1/get-user-info/1 3. 错误埋点:zst-service-demo04 在请求id=2时候报错 ##### 测试链路二 1. 服务调用: - zst-service-demo01 -> zst-service-demo02 - zst-service-demo01 -> zst-service-demo03 -> zst-service-demo04 2. 接口请求:http://localhost:8001/zst/demo1/get-user-by-role/1 3. 错误埋点:zst-service-demo04 在请求id=2时候报错 ##### 链路追踪实现 ###### 使用zipkin+sleuth实现 > 这个是比较成熟的分布式链路追踪实现方案 ###### 拦截器自定义实现 > 基于Google Dapper 论文,进行自定义实现。 > > 原理: > > - traceId :记录整个服务链路的 ID,由首次请求方创建(这里使用zst-service-demo01创建),整个服务链路中唯一 > - spanId :记录当前服务块的 ID,由当前服务方创建。 > - parentId :记录上一个请求服务的 spanId #### 安装教程 ##### 项目搭建 1. GIT工程代码下载 ```sh git clone https://gitee.com/sishen007/graduation-project-tracking.git ``` 2. 使用IDEA代码开发工具导入项目,pom依赖导入 ##### 环境搭建 1. 本地搭建Nacos环境 - 下载地址下载:https://github.com/alibaba/nacos/releases/tag/1.4.0 - 解压安装包,直接运行bin目录下的startup.cmd ```sh cmd startup.cmd -m standalone ``` - 监控页面访问:http://localhost:8848/nacos 用户名/密码: nacos / nacos 2. 数据库 - Mysql5.6+ - 数据表涉及SQL ```sql /* Navicat Premium Data Transfer Source Server : 192.168.87.61 Source Server Type : MySQL Source Server Version : 100038 Source Host : 192.168.87.61:3306 Source Schema : zst_service Target Server Type : MySQL Target Server Version : 100038 File Encoding : 65001 Date: 30/04/2022 12:44:04 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for permission -- ---------------------------- DROP TABLE IF EXISTS `permission`; CREATE TABLE `permission` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '权限ID', `permission_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '权限名', `permission_intro` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '权限介绍', `gmt_created` datetime NULL DEFAULT NULL COMMENT '创建时间', `gmt_modified` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除(0: 未删除;1:删除)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限表' ROW_FORMAT = Compact; -- ---------------------------- -- Records of permission -- ---------------------------- INSERT INTO `permission` VALUES (1, '创建商品', '创建商品操作', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `permission` VALUES (2, '删除商品', '删除商品操作', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `permission` VALUES (3, '新增用户', '新增用户操作', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `permission` VALUES (4, '删除用户', '删除用户操作', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); -- ---------------------------- -- Table structure for role -- ---------------------------- DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '角色ID', `role_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '角色名', `role_intro` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '角色介绍', `gmt_created` datetime NULL DEFAULT NULL COMMENT '创建时间', `gmt_modified` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除(0: 未删除;1:删除)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Compact; -- ---------------------------- -- Records of role -- ---------------------------- INSERT INTO `role` VALUES (1, '运营管理', '增加、删除商品', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `role` VALUES (2, '人事管理', '增加、删除用户', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); -- ---------------------------- -- Table structure for role_permission -- ---------------------------- DROP TABLE IF EXISTS `role_permission`; CREATE TABLE `role_permission` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增ID', `role_id` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '角色ID', `permission_id` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '权限ID', `gmt_created` datetime NULL DEFAULT NULL COMMENT '创建时间', `gmt_modified` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除(0: 未删除;1:删除)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Compact; -- ---------------------------- -- Records of role_permission -- ---------------------------- INSERT INTO `role_permission` VALUES (1, 1, 1, '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `role_permission` VALUES (2, 1, 2, '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `role_permission` VALUES (3, 2, 3, '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `role_permission` VALUES (4, 2, 4, '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名', `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '加密密码', `mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', `gmt_created` datetime NULL DEFAULT NULL COMMENT '创建时间', `gmt_modified` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除(0: 未删除;1:删除)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Compact; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, '张三', '123456', '18210011001', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `user` VALUES (2, '李四', '123456', '18310011001', '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); -- ---------------------------- -- Table structure for user_role -- ---------------------------- DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` ( `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增id', `user_id` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户ID', `role_id` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '角色ID', `gmt_created` datetime NULL DEFAULT NULL COMMENT '创建时间', `gmt_modified` datetime NULL DEFAULT NULL COMMENT '更新时间', `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除(0: 未删除;1:删除)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户角色映射表' ROW_FORMAT = Compact; -- ---------------------------- -- Records of user_role -- ---------------------------- INSERT INTO `user_role` VALUES (1, 1, 1, '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); INSERT INTO `user_role` VALUES (2, 2, 2, '2022-04-30 12:33:17', '2022-04-30 12:33:21', 0); SET FOREIGN_KEY_CHECKS = 1; ``` #### 参考资料 1. Nacos官方中文文档:https://nacos.io/zh-cn/docs/what-is-nacos.html 2. SpringCloud官方文档:https://spring.io/projects/spring-cloud、https://spring.io/projects/spring-cloud-sleuth 3. #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)