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

dubbo自定義異常的完整步驟與測(cè)試

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

前言

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

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

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

操作步驟

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

ComnonFilter 類(lèi),只需要實(shí)現(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)的目錄,注意文件路徑和文件名稱(chēng)是固定的,文件內(nèi)容如下

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

1、pom中導(dǎo)入上面這個(gè)公共依賴(lài)的maven工程坐標(biāo),然后在配置文件中,將過(guò)濾器的名稱(chēng)配置進(jìn)去

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

三、消費(fèi)端配置

消費(fèi)端暫時(shí)無(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);
 
    }
}

測(cè)試

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

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

3、啟動(dòng)消費(fèi)端服務(wù)模擬服務(wù)調(diào)用

消費(fèi)端報(bào)出的異常信息

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

使用場(chǎng)景說(shuō)明

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

總結(jié)

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

相關(guān)文章

最新評(píng)論

电白县| 措美县| 山阳县| 手机| 图木舒克市| 曲松县| 福贡县| 青海省| 五大连池市| 昭通市| 林芝县| 桓台县| 卓尼县| 丹江口市| 博白县| 衡阳市| 调兵山市| 班玛县| 仙游县| 东乌珠穆沁旗| 沁源县| 永川市| 桃江县| 将乐县| 金沙县| 章丘市| 理塘县| 裕民县| 保靖县| 塔城市| 嘉峪关市| 镶黄旗| 自贡市| 平安县| 廊坊市| 梓潼县| 乌苏市| 中超| 启东市| 略阳县| 洪洞县|