天天看點

Springcloud+zipkin實作鍊路追蹤

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

繼續閱讀