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/ 會出現圖形頁面