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/ 会出现图形页面