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

springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤的示例代碼

 更新時(shí)間:2020年10月26日 17:21:22   作者:松下聽(tīng)泉  
這篇文章主要介紹了springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤,本文通過(guò)圖文示例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.新建項(xiàng)目

在這里插入圖片描述

利用idea創(chuàng)建一個(gè)父項(xiàng)目,三個(gè)子項(xiàng)目,其中一個(gè)項(xiàng)目為生產(chǎn)者,一個(gè)項(xiàng)目為消費(fèi)者,一個(gè)為接口等公共服務(wù)項(xiàng)目,生產(chǎn)者和消費(fèi)者需要有web依賴(lài),可以作為tomcat容器啟動(dòng)。

2.項(xiàng)目依賴(lài)

<dependencies>
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>2.7.6</version>
    </dependency>

    <!-- zk的依賴(lài) -->
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-dependencies-zookeeper</artifactId>
      <version>2.7.6</version>
      <type>pom</type>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
    </dependency>

3.在facade項(xiàng)目中新建接口

在這里插入圖片描述

4.編寫(xiě)生產(chǎn)者

4.1 增加dubbo配置

server.port=8081
dubbo.registry.address=zookeeper://localhost:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.registry.timeout=30000
dubbo.application.name=dubbo-provider-ll

4.2 編寫(xiě)生產(chǎn)者dubbo filter

public class ProviderFilter implements Filter {
  @Override
  public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
    Object threadName= invocation.getAttachment("ThreadName");
    if(null!=threadName){
      Thread thread = Thread.currentThread();
      thread.setName(threadName.toString());
    }
    return invoker.invoke(invocation);
  }
}

注意:此處Filter 是dubbo的filter,不是servlet的filter

這里代碼的目的是將從消費(fèi)端傳來(lái)的線程名稱(chēng)設(shè)置為線程名稱(chēng)

在resources目錄下新建META-INF/dubbo/com.alibaba.dubbo.rpc.Filter 文件
即新增目錄META-INF/dubbo和文件 com.alibaba.dubbo.rpc.Filter

在文件中增加,等號(hào)后面為實(shí)現(xiàn)dubbo filter的實(shí)現(xiàn)類(lèi)路徑
providerFilter=com.dubbo.spring.provider.filter.ProviderFilter

4.3編寫(xiě)dubbo生產(chǎn)者實(shí)現(xiàn)類(lèi)

@Service(filter = {"providerFilter"})
public class DemoServiceImpl implements IDemoService {
  public Logger LOGGER= LoggerFactory.getLogger(DemoServiceImpl.class);
  @Override
  public String getName() {
    LOGGER.info("provider ThreadName : "+Thread.currentThread().getName());
    return "dubbo-test";
  }
}

5.編寫(xiě)消費(fèi)者

5.1編寫(xiě)消費(fèi)者filter

public class DubboFilter implements Filter {
  @Override
  public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
    String name = Thread.currentThread().getName();
    invocation.setAttachment("ThreadName",name);
    return invoker.invoke(invocation);
  }
}

此處是將線程名稱(chēng)放入到attachment中,attachment底層是hashmap,后續(xù)使用dubbo請(qǐng)求生產(chǎn)者時(shí),會(huì)把a(bǔ)ttachment給到生產(chǎn)者,故在生產(chǎn)中中可以通過(guò)key ThreadName來(lái)獲取消費(fèi)者端的線程名稱(chēng)
在resources目錄下新建META-INF/dubbo/com.alibaba.dubbo.rpc.Filter 文件
即新增目錄META-INF/dubbo和文件 com.alibaba.dubbo.rpc.Filter

在文件中增加,等號(hào)后面為實(shí)現(xiàn)dubbo filter的實(shí)現(xiàn)類(lèi)路徑
consumerFilter=com.dubbo.spring.consumer.filter.DubboFilter

5.2 編寫(xiě)response對(duì)象

public class Response implements Serializable {

  private static final long serialVersionUID = -3186818832535757509L;
  private String code;

  private String message;

  private Object result;

  private String index;

  public String getCode() {
    return code;
  }

  public void setCode(String code) {
    this.code = code;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

  public Object getResult() {
    return result;
  }

  public void setResult(Object result) {
    this.result = result;
  }

  public String getIndex() {
    return index;
  }

  public void setIndex(String index) {
    this.index = index;
  }
}

此response為web端返回到頁(yè)面統(tǒng)一對(duì)象

5.3 編寫(xiě)aop切面

@Aspect
@Component
public class AopContext {

  @Before("execution(* com.dubbo.spring..*.*(..))")
  public void before(){
    Thread thread = Thread.currentThread();
    thread.setName(UUIDUtil.getUUID());
  }
  @Around("execution(* com.dubbo.spring..*.*(..))")
  public Object around(ProceedingJoinPoint pjp){
    Response response=new Response();
    try {
      Object proceed = pjp.proceed();
      if(proceed instanceof Response){
         response=(Response) proceed;
        response.setIndex(Thread.currentThread().getName());
      }
    } catch (Throwable throwable) {
      throwable.printStackTrace();
    }
    return response;
  }
}

1.before是在請(qǐng)求進(jìn)入時(shí)給線程設(shè)置名稱(chēng),為隨機(jī)生成的uuid
2.around是環(huán)繞通知,在執(zhí)行完之后,在返回的結(jié)果中將線程名稱(chēng)設(shè)置進(jìn)去,便于以后異常追蹤

5.4 編寫(xiě)web

@RestController
public class WebController {

  private Logger LOGGER= LoggerFactory.getLogger(WebController.class);

  @Reference(filter = {"consumerFilter"})
  private IDemoService iDemoService;

  @GetMapping("/getName")
  public Response getName(){
    LOGGER.info("consumer ThreadName : "+Thread.currentThread().getName());
    String name = iDemoService.getName();
    Response response=new Response();
    response.setResult(name);
    response.setCode("1001");
    response.setMessage("success");
    return response;
  }
}

請(qǐng)求結(jié)果

在這里插入圖片描述

此處為postman響應(yīng)的,index 為1ca55cb7a17148879923265b89102ccf

生產(chǎn)者線程名稱(chēng):

在這里插入圖片描述

消費(fèi)者線程名稱(chēng):

在這里插入圖片描述

可以看到從web頁(yè)面到生產(chǎn)者,消費(fèi)者,都有一個(gè)全局唯一id進(jìn)行貫穿,如果在web頁(yè)面提示有異常時(shí),可以通過(guò)這個(gè)uuid進(jìn)行日志追蹤

到此這篇關(guān)于springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤的文章就介紹到這了,更多相關(guān)springboot整合dubbo內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Tomcat處理請(qǐng)求的線程模型詳解

    Tomcat處理請(qǐng)求的線程模型詳解

    這篇文章主要為大家詳細(xì)介紹了Tomcat處理請(qǐng)求的線程模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 淺談SpringBoot實(shí)現(xiàn)異步調(diào)用的幾種方式

    淺談SpringBoot實(shí)現(xiàn)異步調(diào)用的幾種方式

    本文主要介紹了淺談SpringBoot實(shí)現(xiàn)異步調(diào)用的幾種方式,主要包括CompletableFuture異步任務(wù),基于@Async異步任務(wù), TaskExecutor異步任務(wù),感興趣的可以了解一下
    2023-11-11
  • java教程之二個(gè)arraylist排序的示例分享

    java教程之二個(gè)arraylist排序的示例分享

    常常遇到數(shù)組排序的問(wèn)題,下面提供二個(gè)java的arraylist排序示例,需要的朋友可以參考下
    2014-03-03
  • RocketMQ?Broker消息如何刷盤(pán)源碼解析

    RocketMQ?Broker消息如何刷盤(pán)源碼解析

    這篇文章主要為大家介紹了RocketMQ?Broker消息如何刷盤(pán)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • java調(diào)用相互依賴(lài)的dll的處理方法

    java調(diào)用相互依賴(lài)的dll的處理方法

    大家好,本篇文章主要講的是java調(diào)用相互依賴(lài)的dll的處理方法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • JAVA設(shè)計(jì)模式之訪問(wèn)者模式原理與用法詳解

    JAVA設(shè)計(jì)模式之訪問(wèn)者模式原理與用法詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之訪問(wèn)者模式,簡(jiǎn)單說(shuō)明了訪問(wèn)者模式的原理,并結(jié)合實(shí)例分析了java訪問(wèn)者模式的定義與用法,需要的朋友可以參考下
    2017-08-08
  • SpringBoot實(shí)現(xiàn)反向代理的示例代碼

    SpringBoot實(shí)現(xiàn)反向代理的示例代碼

    本文主要介紹了SpringBoot實(shí)現(xiàn)反向代理的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 使用springboot配置文件yml中的map形式

    使用springboot配置文件yml中的map形式

    這篇文章主要介紹了springboot配置文件yml中的map形式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Hadoop Combiner使用方法詳解

    Hadoop Combiner使用方法詳解

    這篇文章主要介紹了 Hadoop Combiner使用方法詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • java連接MySQL數(shù)據(jù)庫(kù)的代碼

    java連接MySQL數(shù)據(jù)庫(kù)的代碼

    這篇文章主要為大家詳細(xì)介紹了java連接MySQL數(shù)據(jù)庫(kù)的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評(píng)論

安多县| 蓝田县| 宁陵县| 博兴县| 化德县| 晋城| 北安市| 红原县| 长宁区| 江津市| 湖州市| 长海县| 汾西县| 浦县| 上饶县| 华蓥市| 昆山市| 平江县| 万全县| 任丘市| 德钦县| 榆社县| 五莲县| 合水县| 镇赉县| 洛南县| 许昌县| 黎川县| 当阳市| 资源县| 鄱阳县| 新营市| 息烽县| 营口市| 临湘市| 勃利县| 读书| 弥勒县| 苍山县| 仁寿县| 买车|