色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ApiBoot Logging使用Rest Template透傳鏈路信息

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-10 22:03 ? 次閱讀

在上一篇文章【ApiBoot Logging使用SpringCloud Openfeign透傳鏈路信息】中我們詳細的講解了ApiBoot Logging整合SpringCloud通過Openfeign進行透傳鏈路信息,包括traceId(鏈路編號)、parentSpanId(上級單元編號)等信息。
ApiBoot Logging不僅僅可以使用Openfeign傳遞鏈路信息,還支持RestTemplate方式,本篇文章來詳細的講解下具體的使用方式。

搭建Logging Admin

我們需要搭建Logging Admin服務,用于接收業(yè)務服務上報的請求日志信息,請參考【將ApiBoot Logging采集的日志上報到Admin】文章內容.

添加ApiBoot統(tǒng)一版本

由于本章采用是Maven 多模塊的方式構建源碼,所以我們只需要將ApiBoot統(tǒng)一版本的依賴配置在root項目的pom.xml內,如下所示:

1.82.1.5.RELEASEorg.minbox.frameworkapi-boot-dependencies${api.boot.version}pomimport

接下來我們營造本篇文章的模擬場景查詢用戶基本信息時一并查詢出用戶的賬號余額

創(chuàng)建賬戶服務

創(chuàng)建一個名為account-serviceSpringBoot項目。

添加相關依賴

在項目pom.xml配置文件內添加相關依賴,如下所示:

org.springframework.bootspring-boot-starter-weborg.minbox.frameworkapi-boot-starter-logging

配置上報的Logging Admin

application.yml配置文件內添加請求日志上報的Logging Admin地址,如下所示:

spring:
  application:
    name: account-service
server:
  port: 9090

api:
  boot:
    logging:
      # 控制臺打印請求日志
      show-console-log: true
      # 美化請求日志
      format-console-log-json: true
      # Logging Admin地址
      admin:
        server-address: 127.0.0.1:8081
注意:server-address配置參數(shù)不需要添加http://前綴

啟用Logging Client

添加完成依賴后我們通過@EnableLoggingClient注解來啟用ApiBoot Logging,在AccountServiceApplication類上添加如下所示:

/**
 * 賬戶服務
 *
 * @author 恒宇少年
 */
@SpringBootApplication
@EnableLoggingClient
public class AccountServiceApplication {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(AccountServiceApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(AccountServiceApplication.class, args);
        logger.info("{}服務啟動成功.", "賬戶");
    }
}
@EnableLoggingClient注解就實例化部分ApiBoot Logging內部所需要的類,將實例放置到Spring IOC容器內。

查詢賬戶余額代碼實現(xiàn)

我們創(chuàng)建一個名為AccountController控制器來提供查詢賬戶的余額信息,代碼實現(xiàn)如下所示:

/**
 * 賬戶服務實現(xiàn)
 *
 * @author 恒宇少年
 */
@RestController
@RequestMapping(value = "/account")
public class AccountController {

    /**
     * 示例,內存賬戶列表
     */
    static final HashMap ACCOUNTS = new HashMap() {{
        put(1, 1233.22);
        put(2, 69269.22);
    }};

    /**
     * 獲取指定賬戶的余額
     *
     * @param accountId
     * @return
     */
    @GetMapping(value = "/{accountId}")
    public Double getBalance(@PathVariable("accountId") Integer accountId) {
        return ACCOUNTS.get(accountId);
    }
},>
至此我們的賬戶服務已經(jīng)編寫完成,下面我們來編寫用戶服務

創(chuàng)建用戶服務

我們來創(chuàng)建一個名為user-serviceSpringBoot項目。

添加相關依賴

在項目pom.xml配置文件內添加相關依賴,如下所示:

org.springframework.bootspring-boot-starter-weborg.minbox.frameworkapi-boot-starter-logging

配置上報的Logging Admin

本章我們使用指定Logging Admin地址的方式配置,修改application.yml配置文件如下所示:

spring:
  application:
    name: user-service
server:
  port: 9091

api:
  boot:
    logging:
      # 控制臺打印請求日志
      show-console-log: true
      # 美化請求日志
      format-console-log-json: true
      # Logging Admin地址
      admin:
        server-address: 127.0.0.1:8081

啟用Logging Client

添加完依賴后我們需要在XxxApplication入口類上添加@EnableLoggingClient注解來啟用ApiBoot Logging,如下所示:

/**
 * 用戶服務
 *
 * @author 恒宇少年
 */
@SpringBootApplication
@EnableLoggingClient
public class UserServiceApplication {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(UserServiceApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
        logger.info("{}服務啟動成功.", "用戶");
    }
}

實例化RestTemplate對象

user-service需要訪問賬戶服務獲取當前用戶的余額,所以我們需要在user-service內實例化RestTemplate,這樣我們才可以通過RestTemplate訪問獲取用戶賬戶余額信息,我們直接在UserServiceApplication類內添加實例,如下所示:

    /**
     * 實例化RestTemplate
     *
     * @return {@link RestTemplate}
     */
    @Bean
    @ConditionalOnMissingBean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

注解解釋:

  • @ConditionalOnMissingBean:這是SpringBoot條件注入其中的一個注解,表示當IOC容器內不存在RestTemplate類型的實例時才會去執(zhí)行restTemplate()方法創(chuàng)建對象。

查詢用戶信息代碼實現(xiàn)

/**
 * 用戶基本信息控制器
 *
 * @author 恒宇少年
 */
@RestController
@RequestMapping(value = "/user")
public class UserController {
    /**
     * 示例,用戶列表
     */
    static final HashMap USERS = new HashMap() {{
        put(1, new User(1, "恒宇少年"));
        put(2, new User(2, "于起宇"));
    }};
    /**
     * 注入RestTemplate
     */
    @Autowired
    private RestTemplate restTemplate;

    /**
     * 獲取用戶基本信息
     *
     * @param userId 用戶編號
     * @return
     */
    @GetMapping(value = "/{userId}")
    public User getUserInfo(@PathVariable("userId") Integer userId) {
        ResponseEntity responseEntity = restTemplate.getForEntity("http://localhost:9090/account/{accountId}", Double.class, userId);
        Double balance = responseEntity.getBody();
        User user = USERS.get(userId);
        if (ObjectUtils.isEmpty(user)) {
            throw new RuntimeException("用戶:" + userId + ",不存在.");
        }
        user.setBalance(balance);
        return user;
    }

    @Data
    public static class User {
        private Integer id;
        private String name;
        private Double balance;

        public User(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
    }
},>

我們所需要的兩個服務都已經(jīng)編寫完成,下面我們來測試RestTemplate是可以透傳ApiBoot Logging的鏈路信息?

運行測試

依次啟動logging-admin > user-service > account-service

測試點:透傳鏈路信息

我們使用curl命令訪問user-service提供的地址/user,如下所示:

? ~ curl http://localhost:9091/user/1
{"id":1,"name":"恒宇少年","balance":1233.22}

下面我看來看下logging-admin控制臺接收到的請求日志。

接收user-service請求日志

Receiving Service: 【user-service -> 127.0.0.1】, Request Log Report,Logging Content:[
    {
        "endTime":1573032865311,
        "httpStatus":200,
        "requestBody":"",
        "requestHeaders":{
            "host":"localhost:9091",
            "user-agent":"curl/7.64.1",
            "accept":"*/*"
        },
        "requestIp":"0:0:0:0:0:0:0:1",
        "requestMethod":"GET",
        "requestParam":"{}",
        "requestUri":"/user/1",
        "responseBody":"{/"id/":1,/"name/":/"恒宇少年/",/"balance/":1233.22}",
        "responseHeaders":{},
        "serviceId":"user-service",
        "serviceIp":"127.0.0.1",
        "servicePort":"9091",
        "spanId":"f8cff018-42d5-481f-98df-c19b7196b3c3",
        "startTime":1573032865130,
        "timeConsuming":181,
        "traceId":"16ad1dd4-beaa-4110-b4b7-fc7d952d9a57"
    }
]

接收account-service請求日志

Receiving Service: 【account-service -> 127.0.0.1】, Request Log Report,Logging Content:[
    {
        "endTime":1573032865309,
        "httpStatus":200,
        "parentSpanId":"f8cff018-42d5-481f-98df-c19b7196b3c3",
        "requestBody":"",
        "requestHeaders":{
            "minbox-logging-x-parent-span-id":"f8cff018-42d5-481f-98df-c19b7196b3c3",
            "minbox-logging-x-trace-id":"16ad1dd4-beaa-4110-b4b7-fc7d952d9a57",
            "host":"localhost:9090",
            "connection":"keep-alive",
            "accept":"application/json, application/*+json",
            "user-agent":"Java/1.8.0_211"
        },
        "requestIp":"127.0.0.1",
        "requestMethod":"GET",
        "requestParam":"{}",
        "requestUri":"/account/1",
        "responseBody":"1233.22",
        "responseHeaders":{},
        "serviceId":"account-service",
        "serviceIp":"127.0.0.1",
        "servicePort":"9090",
        "spanId":"63b18b40-5718-431c-972f-78956ce78380",
        "startTime":1573032865307,
        "timeConsuming":2,
        "traceId":"16ad1dd4-beaa-4110-b4b7-fc7d952d9a57"
    }
]
  • 當我們訪問user-service服務內的/user路徑時,因為是第一次訪問ApiBoot Logging會主動創(chuàng)建traceId(鏈路編號)、spanId(單元編號),因為沒有上級單元所以parentSpanIdnull.
  • 而通過查看account-service服務上報的請求日志時,可以看到ApiBoot Logging相關的鏈路信息是通過HttpHeader的方式進行傳遞的

    • minbox-logging-x-trace-id -> 鏈路編號
    • minbox-logging-x-parent-span-id -> 上級單元編號

敲黑板,劃重點

ApiBoot Logging在內部自動化實現(xiàn)了RestTemplate的攔截器配置,所以我們只需要創(chuàng)建實例就可以,而不需要主動去配置攔截器信息,具體源碼請訪問org.minbox.framework.logging.client.http.rest.LoggingRestTemplateInterceptor查看。

不管你一次請求跨度幾個服務,都可以將請求入口生成的鏈路信息進行依次傳遞,而上下級關系則是根據(jù)parentSpanIdspanId進行綁定的。

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2973

    瀏覽量

    104877
  • MySQL
    +關注

    關注

    1

    文章

    817

    瀏覽量

    26634
  • 人臉識別
    +關注

    關注

    76

    文章

    4012

    瀏覽量

    82050
  • Template
    +關注

    關注

    0

    文章

    8

    瀏覽量

    9479
收藏 人收藏

    評論

    相關推薦

    請問AT支持UDP嗎?

    做了測試,SDK V1.00 AT文件燒寫后,設定為TCP時,是可以了, 但是設定為UDP后,傳出現(xiàn)發(fā)送不成功,但是接收是可以的,是不是AT不支持UDP
    發(fā)表于 07-17 08:28

    最新推出低功耗藍牙模塊

    注意啦!最新推出藍牙模塊,模塊可以省去藍牙底層的軟硬件的時間投入及成本投入,以最短的開發(fā)周期整合現(xiàn)有的方案基于NRF51822的
    發(fā)表于 11-05 13:47

    物聯(lián)網(wǎng)中的數(shù)據(jù)

    摘要:在農業(yè)工業(yè)等場景應用中,存在很多場景是有線網(wǎng)絡無法達到的,借助物聯(lián)網(wǎng)技術使用無線數(shù)據(jù)采集與傳輸能很好的解決這一個問題,在這個數(shù)據(jù)傳輸過程中為了保證數(shù)據(jù)的可靠性和準確性,通常會涉及到“數(shù)據(jù)
    發(fā)表于 08-29 19:27

    物聯(lián)網(wǎng)中的數(shù)據(jù)

    摘要:在農業(yè)工業(yè)等場景應用中,存在很多場景是有線網(wǎng)絡無法達到的,借助物聯(lián)網(wǎng)技術使用無線數(shù)據(jù)采集與傳輸能很好的解決這一個問題,在這個數(shù)據(jù)傳輸過程中為了保證數(shù)據(jù)的可靠性和準確性,通常會涉及到“數(shù)據(jù)
    發(fā)表于 09-03 14:17

    什么是

    的概念概念具體到此次實踐
    發(fā)表于 12-24 07:13

    什么是藍牙

    一.什么是藍牙是最簡單也是最常見的通訊方式(如下圖所示),也叫串口
    發(fā)表于 12-06 06:15

    ApiBoot Logging Admin可視化界面管理日志教程

    ApiBoot Logging Admin支持界面可視化查看請求日志信息,初期版本支持查看上報日志的服務列表、最新的日志等功能,還可以整
    的頭像 發(fā)表于 12-10 22:03 ?510次閱讀

    ApiBoot Logging使用Spring Cloud Openfeign信息

    ApiBoot Logging可以無縫整合SpringCloud來采集請求日志,目前支持RestTemplate、Openfeign兩種方式,我們本章來講解下在使用Openfeign...
    的頭像 發(fā)表于 12-10 22:05 ?550次閱讀

    ApiBoot Logging整合Spring Cloud Eureka負載均衡上報日志

    ApiBoot Logging支持整合服務注冊中心(Eureka、Consul、Nacos Discovery、Zookeeper...)進行上報請求日志,Logging Client會從服務注...
    的頭像 發(fā)表于 12-10 22:08 ?427次閱讀

    ApiBoot Logging忽略路徑不進行采集日志的教程

    ApiBoot Logging支持排除指定路徑不參與日志的采集,當我們的服務集成actuator時,會不斷的重復調用內置的路徑導致大量采集到一些無關業(yè)...
    的頭像 發(fā)表于 12-10 22:18 ?417次閱讀

    修改ApiBoot Logging日志采集前綴的教程

    ApiBoot Logging支持指定單個或者多個路徑的前綴進行采集,也就是我們可以指定/user/**或者/order/**下的單個或者同時指定多個路徑進行...
    的頭像 發(fā)表于 12-10 22:20 ?455次閱讀

    minbox-logging日志分析框架

    gitee-minbox-logging.zip
    發(fā)表于 04-27 10:07 ?1次下載
    minbox-<b class='flag-5'>logging</b><b class='flag-5'>鏈</b><b class='flag-5'>路</b>日志分析框架

    NuMicro M031BT-利用藍牙實現(xiàn)個人健康信息應用的好幫手

    NuMicro M031BT-利用藍牙實現(xiàn)個人健康信息應用的好幫手
    的頭像 發(fā)表于 08-10 11:31 ?590次閱讀
    NuMicro M031BT-利用藍牙<b class='flag-5'>透</b><b class='flag-5'>傳</b>實現(xiàn)個人健康<b class='flag-5'>信息</b>應用的好幫手

    輕松搞懂和非的區(qū)別

    和非是數(shù)據(jù)通信中的兩種不同模式,各自有其適用場景和優(yōu)勢。模式簡單、高效,適用于數(shù)據(jù)完
    的頭像 發(fā)表于 06-05 12:03 ?9923次閱讀
    輕松搞懂<b class='flag-5'>透</b><b class='flag-5'>傳</b>和非<b class='flag-5'>透</b><b class='flag-5'>傳</b>的區(qū)別

    網(wǎng)絡和非是什么區(qū)別是什么

    :適用簡易、立即的數(shù)據(jù)傳輸,留意數(shù)據(jù)的完整性和低延遲。非:適用必須進行數(shù)據(jù)解決優(yōu)化的狀況,提供良好的可靠性和效果。 在挑選傳輸技術時,務必根據(jù)實際的業(yè)務需求、數(shù)據(jù)種類、安全規(guī)
    的頭像 發(fā)表于 08-07 16:19 ?860次閱讀
    主站蜘蛛池模板: 国产学生在线播放精品视频| 4虎最新网址| 亚洲天堂999| 成人a毛片久久免费播放 | 日韩欧无码一区二区三区免费不卡| 亚洲精品www久久久久久久软件| 99热久久精品国产一区二区| 国自产精品手机在线视频| 亲嘴扒胸摸屁股视频免费网站 | 琪琪see色原网色原网站| 伊人久久青草青青综合| 国产精品麻豆AV| 漂亮的保姆3中文版完整版 | 羞羞答答dc视频| 高挑人妻无奈张开腿| 欧美精品色婷婷五月综合| 中文字幕无码A片久久| 果冻传媒2021精品影视| 色屁屁影院| 草比比过程图| 欧美日韩精品久久久免费观看| 综合久久久久久久综合网| 好看的电影网站亚洲一区| 午夜视频在线观看国产| 国产成年网站v片在线观看| 欧洲兽交另类AVXXX| 99久久精品免费精品国产 | 美女白虎穴| 再深点灬舒服灬太大了在线视频| 黄色免费网址在线观看| 亚洲粉嫩美白在线| 国产中文视频| 亚洲AV无码专区国产乱码网站 | 久久亚洲精品AV成人无| 夜色88V精品国产亚洲AV| 精品日韩欧美一区二区三区| 亚洲人日本人jlzzy| 久久九九亚洲精品| 中文字幕无码亚洲视频| 免费国产网站| jizzjizz3d动漫|