欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

dubbo自定義異常的完整步驟與測試

 更新時間:2022年06月13日 09:27:02   作者:逆風(fēng)飛翔的小叔  
最近在項目上遇到一個有關(guān)dubbo的問題,想著給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于dubbo自定義異常的完整步驟與測試的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

在很多公司,使用dubbo做微服務(wù)治理也是很常見的一種方式,簡單來說,就是服務(wù)提供者一方將服務(wù)注冊并發(fā)布到注冊中心,消費者訂閱服務(wù),然后像調(diào)用本地接口一樣;

但是在實際實踐中,經(jīng)常有這么一種場景,就是對于服務(wù)消費者來說,當(dāng)調(diào)用服務(wù)生產(chǎn)者的服務(wù)接口時,一旦服務(wù)提供者的接口拋出異常,如果消費端不使用 try-catch 捕捉的話,在進行問題排查、故障分析時,將會是個頭疼的問題;

對于消費端來說,不可能在所有的調(diào)用dubbo接口的地方都用 try-catch進行包裹吧?有沒有一種辦法,用來統(tǒng)一處理這樣的服務(wù)接口調(diào)用異常方式呢?答案是肯定的,可以使用dubbo自定義過濾器,通過過濾器統(tǒng)一攔截調(diào)用異常問題;

操作步驟

一、創(chuàng)建一個公共的用于處理異常的工程

ComnonFilter 類,只需要實現(xiàn)dubbo提供的Filter 接口即可

package com.congge.filter;
 
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.apache.dubbo.rpc.service.GenericService;
 
import java.util.Date;
 
@Activate(group = {Constants.PROVIDER,Constants.CONSUMER})
public class CommonFilter implements Filter {
 
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
 
        Result result = null;
        try {
            result = invoker.invoke(invocation);
            if (result.hasException() && GenericService.class != invoker.getInterface()) {
                Throwable exception = result.getException();
                String data = String.format("\r\n[level]:Error,[createTime]:%s,[serviceName]:%s,[methodName]:%s,[inputParam]:%s",
                        DateUtil.formatDateTime(new Date()),
                        invoker.getInterface().getName(),
                        invocation.getMethodName(),
                        JSON.toJSONString(invocation.getArguments()));
                System.out.println(data);
                System.out.println(exception);
            }
        }catch (RuntimeException e){
            String data = String.format("\r\n[level]:Error," +
                    "[createTime]:%s," +
                    "[serviceName]:%s," +
                    "[methodName]:%s," +
                    "[inputParam]:%s",
                    DateUtil.formatDateTime(new Date()),
                    invoker.getInterface().getName(),
                    invocation.getMethodName(),
                    JSON.toJSONString(invocation.getArguments()));
            System.out.println(data);
            System.out.println(e);
        }
        return result;
    }
}

在resources目錄下創(chuàng)建相關(guān)的目錄,注意文件路徑和文件名稱是固定的,文件內(nèi)容如下

二、生產(chǎn)端配置文件改造 

1、pom中導(dǎo)入上面這個公共依賴的maven工程坐標(biāo),然后在配置文件中,將過濾器的名稱配置進去

2、生產(chǎn)端提供的服務(wù)中手動添加一個異常

三、消費端配置

消費端暫時無需做其他配置

import com.congge.service.HelloService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class ConsumerMain {
    public static void main(String[] args) throws Exception {
   
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-consumer.xml");
        HelloService service = (HelloService) ac.getBean("helloService");
        String hello = service.hello("Hello Provider");
        System.out.println(hello);
 
    }
}

測試

1、啟動本地的zk服務(wù)

2、啟動生產(chǎn)端服務(wù)

3、啟動消費端服務(wù)模擬服務(wù)調(diào)用

消費端報出的異常信息

由于我們將過濾器配置在生產(chǎn)端了,這時再去觀察生產(chǎn)端的控制臺,可以看到,調(diào)用異常的信息也輸出了

使用場景說明

通常來說,在微服務(wù)的調(diào)用鏈路比較長的時候,在消費端采用上面的方式進行配置,是有一定意義的,可以較快的定位到調(diào)用的服務(wù)接口,以及拋出的具體的問題原因,便于服務(wù)提供者快速進行問題定位和修復(fù)

總結(jié)

到此這篇關(guān)于dubbo自定義異常的文章就介紹到這了,更多相關(guān)dubbo自定義異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中的NamespaceHandler加載過程源碼詳解

    Spring中的NamespaceHandler加載過程源碼詳解

    這篇文章主要介紹了Spring中的NamespaceHandler加載過程源碼詳解,Spring提供的NamespaceHandler的處理機制,簡單來說就是命名空間處理器,Spring為了開放性提供了NamespaceHandler機制,這樣我們就可以根據(jù)需求自己來處理我們設(shè)置的標(biāo)簽元素,需要的朋友可以參考下
    2024-02-02
  • SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解

    SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解

    這篇文章主要介紹了SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解,Aspect(切面)通常是一個類,里面可以定義切入點和通知(切面 = 切點+通知),execution()是最常用的切點函數(shù),需要的朋友可以參考下
    2024-01-01
  • 深入理解Java虛擬機體系結(jié)構(gòu)

    深入理解Java虛擬機體系結(jié)構(gòu)

    這篇文章主要介紹了深入理解Java虛擬機體系結(jié)構(gòu),具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • SpringBoot詳解整合Spring?Boot?Admin實現(xiàn)監(jiān)控功能

    SpringBoot詳解整合Spring?Boot?Admin實現(xiàn)監(jiān)控功能

    這篇文章主要介紹了SpringBoot整合Spring?Boot?Admin實現(xiàn)服務(wù)監(jiān)控,內(nèi)容包括Server端服務(wù)開發(fā),Client端服務(wù)開發(fā)其中Spring?Boot?Admin還可以對其監(jiān)控的服務(wù)提供告警功能,如服務(wù)宕機時,可以及時以郵件方式通知運維人員,感興趣的朋友跟隨小編一起看看吧
    2022-07-07
  • 三種SpringBoot中實現(xiàn)異步調(diào)用的方法總結(jié)

    三種SpringBoot中實現(xiàn)異步調(diào)用的方法總結(jié)

    Spring Boot 提供了多種方式來實現(xiàn)異步任務(wù),這篇文章主要為大家介紹了常用的三種實現(xiàn)方式,文中的示例代碼講解詳細,需要的可以參考一下
    2023-05-05
  • Springboot簡單熱部署實現(xiàn)步驟解析

    Springboot簡單熱部署實現(xiàn)步驟解析

    這篇文章主要介紹了Springboot簡單熱部署實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot加入Guava Cache實現(xiàn)本地緩存代碼實例

    SpringBoot加入Guava Cache實現(xiàn)本地緩存代碼實例

    這篇文章主要介紹了SpringBoot加入Guava Cache實現(xiàn)本地緩存代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java常用類庫Apache Commons工具類說明及使用實例詳解

    Java常用類庫Apache Commons工具類說明及使用實例詳解

    這篇文章主要介紹了Java常用類庫Apache Commons工具類說明及使用實例詳解,需要的朋友可以參考下
    2020-02-02
  • Python中scrapy框架的ltem和scrapy.Request詳解

    Python中scrapy框架的ltem和scrapy.Request詳解

    這篇文章主要介紹了Python中scrapy框架的ltem和scrapy.Request詳解,Item是保存爬取數(shù)據(jù)的容器,它的使用方法和字典類似,不過,相比字典,Item提供了額外的保護機制,可以避免拼寫錯誤或者定義字段錯誤,需要的朋友可以參考下
    2023-09-09
  • Java非阻塞I/O模型之NIO相關(guān)知識總結(jié)

    Java非阻塞I/O模型之NIO相關(guān)知識總結(jié)

    在了解NIO (Non-Block I/O) 非阻塞I/O模型之前,我們可以先了解一下原始的BIO(Block I/O) 阻塞I/O模型,NIO模型能夠以非阻塞的方式更好的利用服務(wù)器資源,需要的朋友可以參考下
    2021-05-05

最新評論