最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Dubbo實(shí)現(xiàn)分布式日志鏈路追蹤

 更新時(shí)間:2021年07月26日 10:40:52   作者:weixin_39178876  
這篇文章主要介紹了Dubbo實(shí)現(xiàn)分布式日志鏈路追蹤方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

技術(shù)場景

在日常的開發(fā)、測試或運(yùn)維的過程中,經(jīng)常存在這樣的場景,開發(fā)人員在代碼中使用日志工具(log4j、slf4j)記錄日志,比如請求ID、IP等,方便在線上快速、精準(zhǔn)的定位問題,通過完整的日志鏈路清晰的進(jìn)行信息定位。

一般的項(xiàng)目都是分層的、分布式的,在眾多的日志信息中,如何區(qū)分哪些日志信息是同一請求發(fā)出來的,詳細(xì)的實(shí)現(xiàn)如下。

技術(shù)框架

項(xiàng)目框架:Spring boot

分布式協(xié)調(diào):Zookeeper、Dubbo

日志工具:Sf4j

構(gòu)建工具:Maven

開發(fā)工具:IDEA

項(xiàng)目框架

項(xiàng)目結(jié)構(gòu)

mdc-dubbo-api:接口服務(wù)

mdc-dubbo-provider:服務(wù)端服務(wù)

mdc-dubbo-consumer:消費(fèi)端服務(wù)

項(xiàng)目配置

mdc-dubbo-api

提供一個(gè)接口

public interface OrderService {
String getOrder(String orderid);
}

mdc-dubbo-consumer

在服務(wù)端,在Controller層使用MDC工具類放入一個(gè)TRACE_LOG_ID信息,在此請求的service層、mdc-dubbo-provider中使用該信息。


服務(wù)端項(xiàng)目結(jié)構(gòu)

項(xiàng)目分為Controller、Service、Filter等各層:

Controller層:存放TRACE_LOG_ID, 打印

@GetMapping("get/{id}")
    public String get(@PathVariable("id") String id){
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        MDC.put(Constants.TRACE_LOG_ID, uuid);
        LOGGER.info("controller->param:{}", id);
        return consumerService.getName(id);
    }

Service層:打印TRACE_LOG_ID

@Override
    public String getName(String id) {
        LOGGER.info("consumer->service->param:{}", id);
        return orderService.getOrder(id);
    }

Filter:

public class TraceFilter implements Filter {
@Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        //從MDC中獲取
        String logId = MDC.get(Constants.TRACE_LOG_ID);
        Map<String, String> attachments = invocation.getAttachments();
        attachments.put(Constants.TRACE_LOG_ID, logId);
        return invoker.invoke(invocation);
    }

需要過濾器配置在resources->MATE-INF->dobbo文件夾下

![過濾器配置https://img-blog.csdnimg.cn/20181219100406136.png)

traceFilter=com.bestpay.provider.filter.TraceFilter

此處注意 此處使用到了Dubbo中spi機(jī)制,文件名必須是com.alibaba.dubbo.rpc.Filter

dubbo配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--過濾器配置-->
   <!-- <dubbo:provider filter="traceFilter" />-->
    <!-- 應(yīng)用名-->
    <dubbo:application name="dmc-dubbo-provider"/>
    <!--zookeeper注冊中心-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>

    <dubbo:protocol name="dubbo" port="20880"/>
    <!--服務(wù)注冊-->
    <dubbo:service interface="com.bestpay.service.OrderService" ref="orderService" timeout="10000" **filter="traceFilter"**/>
    <bean id="orderService" class="com.bestpay.provider.service.OrderServiceImpl" />

</beans>

其中filter="traceFilter是引用dobbo目錄下配置中的key

logback配置

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] %logger %line --%mdc{client} [%X{TRACE_LOG_ID}] %msg%n</pattern>
            <!-- 控制臺(tái)也要使用UTF-8,不要使用GBK,否則會(huì)中文亂碼 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

TRACE_LOG_ID對應(yīng)放入MDC中的key

mdc-dubbo-provider

配置和## mdc-dubbo-consumer類似,其中在Filter上稍微有些差別

public class TraceFilter implements Filter {
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        String logId = invocation.getAttachment(Constants.TRACE_LOG_ID);
        MDC.put(Constants.TRACE_LOG_ID, logId);
        return invoker.invoke(invocation);
    }
}

項(xiàng)目運(yùn)行

mdc-dubbo-consumer日志:
[2018-12-19 10:16:56] [INFO ] com.bestpay.comsumer.controller.ConsumerController 33 – [d88ecba6581c47b1b3ade78d2821d13a] controller->param:223
[2018-12-19 10:16:56] [INFO ] com.bestpay.comsumer.service.impl.ComsumerServiceImpl 20 – [d88ecba6581c47b1b3ade78d2821d13a] consumer->service->param:223

mdc-dubbo-provider日志:
[2018-12-19 10:16:56] [INFO ] com.bestpay.provider.service.OrderServiceImpl 13 – [d88ecba6581c47b1b3ade78d2821d13a] provider->service->param:223

以上,完成了dubbo分布式服務(wù)之間日志的完整鏈路。為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

  • 走進(jìn)JDK之不可變類String

    走進(jìn)JDK之不可變類String

    這篇文章主要給大家介紹了JDK之不可變類String的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JDK具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • spring boot使用i18n時(shí)properties文件中文亂碼問題的解決方法

    spring boot使用i18n時(shí)properties文件中文亂碼問題的解決方法

    這篇文章主要介紹了spring boot使用i18n時(shí)properties文件中文亂碼問題的解決方法,需要的朋友可以參考下
    2017-11-11
  • 一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    java反射機(jī)制是一個(gè)很好用的東西,用它可以解決很多死的東西,因?yàn)榉瓷錂C(jī)制的靈活行很大,有了他,我們就不要花太多的時(shí)間來寫操做數(shù)據(jù)庫的代碼了,這個(gè)可以很大的減少開發(fā)時(shí)間,而且代碼的可讀性好
    2021-09-09
  • Java集合WeakHashMap源碼分析

    Java集合WeakHashMap源碼分析

    這篇文章主要介紹了Java集合WeakHashMap源碼分析,和HashMap一樣,WeakHashMap 也是一個(gè)散列表,它存儲(chǔ)的內(nèi)容也是鍵值對(key-value)映射,而且鍵和值都可以是null,需要的朋友可以參考下
    2023-09-09
  • Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法示例

    Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法,涉及java針對數(shù)組的遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • @OneToMany查詢陷入循環(huán)引用的解決方案

    @OneToMany查詢陷入循環(huán)引用的解決方案

    這篇文章主要介紹了@OneToMany查詢陷入循環(huán)引用的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 簡述JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別

    簡述JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別

    這篇文章主要介紹了JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 深入解析Java的Spring框架中bean的依賴注入

    深入解析Java的Spring框架中bean的依賴注入

    這篇文章主要介紹了Java的Spring框架中bean的依賴注入,講解了以構(gòu)造函數(shù)為基礎(chǔ)的依賴注入和基于setter方法的依賴注入的方式,需要的朋友可以參考下
    2015-12-12
  • 最新評論

    旬邑县| 绥中县| 广水市| 平江县| 蓬莱市| 文山县| 黑龙江省| 久治县| 阿鲁科尔沁旗| 基隆市| 双鸭山市| 耒阳市| 龙州县| 图木舒克市| 西乌珠穆沁旗| 绥宁县| 宜丰县| 固安县| 牟定县| 明光市| 宁南县| 五寨县| 神农架林区| 仙桃市| 垣曲县| 西峡县| 县级市| 长宁区| 上蔡县| 布尔津县| 富顺县| 太保市| 镇平县| 玉门市| 浏阳市| 砚山县| 宁海县| 连江县| 崇阳县| 虹口区| 宣武区|