1.该环境为window环境 2.项目中需要追踪的Module 的pom 文件中引入依赖 zipkin (该包中包含了spring-cloud-starter-sleuth) <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> 3.同时还需要启动链路追踪的一个服务jar zipkin-server-2.11.8-exec.jar [该jar已经放到说明文件目录中] 启动命令: java -jar zipkin-server-2.11.8-exec.jar 4.在需要链路追踪中的Module 的 application.yml 文件中增加配置 spring: # 链路追踪 启动jar服务,默认端口9411 zipkin: base-url: http://localhost:9411/ # spring.sleuth.sampler.probability 为采样率,默认为0.1,开发测试设为1. sleuth: sampler: probability: 1 5.7100服务 通过 openFeign 调用 9100服务 6.数据库表结构 DROP TABLE IF EXISTS "public"."t_user"; CREATE TABLE "public"."t_user" ( "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying, "user_name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, "pass_word" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, "nick_name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, "tele" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, "create_time" timestamp(6) DEFAULT NULL::timestamp without time zone ) ; COMMENT ON TABLE "public"."t_user" IS '用户表-李庆伟'; INSERT INTO "public"."t_user" VALUES ('1', 'liqingwei', 'c4ca4238a0b923820dcc509a6f75849b', '李老板', '15801174888', '2020-04-28 14:01:06'); ALTER TABLE "public"."t_user" ADD CONSTRAINT "user_t_pkey" PRIMARY KEY ("id"); DROP TABLE IF EXISTS "public"."t_article_news"; CREATE TABLE "public"."t_article_news" ( "id" varchar(38) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL, "name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL, "contents" varchar(2000) COLLATE "pg_catalog"."default" DEFAULT NULL, "author" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL ) ; COMMENT ON COLUMN "public"."t_article_news"."name" IS '文章名称'; COMMENT ON COLUMN "public"."t_article_news"."contents" IS '文章内容'; COMMENT ON COLUMN "public"."t_article_news"."author" IS '文章作者'; COMMENT ON TABLE "public"."t_article_news" IS '文章表'; INSERT INTO "public"."t_article_news" VALUES ('1', '文章1', '内容1', '作者1'); INSERT INTO "public"."t_article_news" VALUES ('3', '文章3', '内容3', '作者3'); INSERT INTO "public"."t_article_news" VALUES ('4', '文章4', '内容4', '作者4'); INSERT INTO "public"."t_article_news" VALUES ('5', '文章5', '内容5', '作者5'); INSERT INTO "public"."t_article_news" VALUES ('2', '文章2', '内容2', '作者2'); ALTER TABLE "public"."t_article_news" ADD CONSTRAINT "t_article_news_pkey" PRIMARY KEY ("id"); 7.最后就是通过地址访问:http://localhost:9411/
代码部分:
A服务代码
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.Map; /** * 链路追踪 * @author 李庆伟 * @date 2020/7/19 16:40 */ @Slf4j @RestController @RequestMapping("testRest") public class TestRestController { @Autowired private RestTemplate restTemplate; private static final String PRO_7001_URL = "http://localhost:7001"; //跨服务调用 @GetMapping("testOne") //可以设置方法传参 和 在请求头中设置参数 public Map<String,Object> getPostForObjectMonth(){ log.info("链路追踪开始啦啦啦。。。。。。。。。。。"); // 封装参数,千万不要替换为Map与HashMap,否则参数无法传递 MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>(); paramMap.add("pageNo",1); paramMap.add("pageSize",1); HttpHeaders headers = new HttpHeaders(); headers.add("ID_Test","hello_testOne_getPostForObjectMonth"); //headers.add();在请求头中设置传递信息 HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers); Map<String,Object> map = restTemplate.postForObject(PRO_7001_URL+"/user/findUserByPage",httpEntity,Map.class); return map; } }
B服务
import com.dev.model.User; import com.dev.service.UserService; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * @author 李庆伟 * @date 2020/7/18 19:46 */ @RestController @RequestMapping("user") public class UserController { @Autowired private UserService userService; /** * 分页查询 * [pageNo, pageSize] * @return {@link Map< String, Object>} * @throws * @author 李庆伟 * @date 2020/7/19 18:07 */ @PostMapping("findUserByPage") public Map<String, Object> findUserByPage(Integer pageNo, Integer pageSize, HttpServletRequest request){ String herderId = request.getHeader("ID_Test");//测试是否传递请求头 System.out.println(herderId); Map<String,Object> map = new HashMap<String,Object>(); PageInfo<User> pageInfo = userService.findUserByPage(pageNo,pageSize);//分页查询 map.put("pageInfo",pageInfo); return map; } }
访问:http://localhost:9411/ 会出现图形页面