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

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

完善資料讓更多小伙伴認識你,還能領取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服務,用于接收業務服務上報的請求日志信息,請參考【將ApiBoot Logging采集的日志上報到Admin】文章內容.

添加ApiBoot統一版本

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

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

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

創建賬戶服務

創建一個名為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配置參數不需要添加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容器內。

查詢賬戶余額代碼實現

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

/**
 * 賬戶服務實現
 *
 * @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);
    }
},>
至此我們的賬戶服務已經編寫完成,下面我們來編寫用戶服務

創建用戶服務

我們來創建一個名為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類型的實例時才會去執行restTemplate()方法創建對象。

查詢用戶信息代碼實現

/**
 * 用戶基本信息控制器
 *
 * @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;
        }
    }
},>

我們所需要的兩個服務都已經編寫完成,下面我們來測試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會主動創建traceId(鏈路編號)、spanId(單元編號),因為沒有上級單元所以parentSpanIdnull.
  • 而通過查看account-service服務上報的請求日志時,可以看到ApiBoot Logging相關的鏈路信息是通過HttpHeader的方式進行傳遞的

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

敲黑板,劃重點

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

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

審核編輯 黃昊宇

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

    關注

    19

    文章

    2971

    瀏覽量

    104854
  • MySQL
    +關注

    關注

    1

    文章

    817

    瀏覽量

    26623
  • 人臉識別
    +關注

    關注

    76

    文章

    4012

    瀏覽量

    82012
  • Template
    +關注

    關注

    0

    文章

    8

    瀏覽量

    9478
收藏 人收藏

    評論

    相關推薦

    請問AT支持UDP嗎?

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

    物聯網中的數據

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

    物聯網中的數據

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

    什么是

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

    什么是藍牙

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

    藍牙模塊簡介之藍牙模塊優勢分析

    藍牙模塊簡介_藍牙模塊優勢分析。 隨著智能手機普及,很多消費產品如果不能跟手機交互都不好意思說是智能設備,那怎樣把自家產品和手機“勾搭”上呢?答案是藍牙
    發表于 12-01 15:09 ?17次下載

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

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

    ApiBoot Logging使用Spring Cloud Openfeign信息

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

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

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

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

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

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

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

    minbox-logging日志分析框架

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

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

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

    輕松搞懂和非的區別

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

    網絡和非是什么區別是什么

    :適用簡易、立即的數據傳輸,留意數據的完整性和低延遲。非:適用必須進行數據解決優化的狀況,提供良好的可靠性和效果。 在挑選傳輸技術時,務必根據實際的業務需求、數據種類、安全規
    的頭像 發表于 08-07 16:19 ?851次閱讀
    主站蜘蛛池模板: 美女拉开腿让男生桶到爽| 啊轻点啊再深点视频免费| 老师湿乎乎两半嫩| 俄罗斯19girl video9| 又色又爽又黄gif动态视频| 色妞色视频一区二区三区四区| 黄色一级毛片免费| 边摸边吃奶边做激情叫床视| 一二三四视频免费社区5| 色迷迷电影| 暖暖高清视频免费| 久久yy99re66| 国产亚洲tv在线观看| 糙汉顶弄抽插HHHH| 91情国产l精品国产亚洲区| 亚洲熟妇色自偷自拍另类| 网友自拍偷拍| 色情内射少妇兽交| 青草久久影院| 蜜桃色欲AV久久无码精品| 久cao在线香蕉| 国产在线观看网址你懂得| 把手戳进美女尿口里动态图| 最近中文字幕2019国语4| 亚洲中文字幕手机版| 亚洲AV久久无码精品九九软件 | 亚洲国产精品久久人人爱| 日本孕妇大胆孕交| 欧美夜夜噜2017最新| 免费毛片视频网站| 美女爽到嗷嗷嗷叫| 伦理片天堂eeuss影院2o12| 久久精品中文字幕| 久久国产精品麻豆AV影视 | 日韩欧美一区二区三区在线视频| 男人叼女人| 美女激清床上戏大全| 老湿机一区午夜精品免费福利 | 国产日韩欧美综合久久| 国产日韩亚洲精品视频| 国产综合无码一区二区色蜜蜜|