DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)
Dubbo過濾器概述
Dubbo中的過濾器和Web應(yīng)用中的過濾器的概念是一樣的,提供了在服務(wù)調(diào)用前后插入自定義邏輯的途徑。過濾器是整個(gè)Dubbo框架中非常重要的組成部分,Dubbo中很多功能都是基于過濾器擴(kuò)展而來的。過濾器提供了服務(wù)提供者和消費(fèi)者調(diào)用過程的攔截,即每次都執(zhí)行RPC調(diào)用的時(shí)候,對(duì)應(yīng)的過濾器都會(huì)生效。雖然過濾器的功能強(qiáng)大,但由于每次調(diào)用時(shí)都會(huì)執(zhí)行,因此在使用的時(shí)候需要注意它對(duì)性能的影響。
過濾器的使用
- 一種方式是使用@Active注解默認(rèn)啟用;
- 一種方式是在配置文件中配置;
<!-- 消費(fèi)方調(diào)用過程攔截 --> <dubbo:reference filter="xxx, yyy" /> <!-- 消費(fèi)方調(diào)用過程默認(rèn)攔截器,將攔截所有reference --> <dubbo:consumer filter="xxx, yyy" /> <!-- 服務(wù)提供方調(diào)用過程攔截 --> <dubbo:service filter="xxx, yyy" /> <!-- 服務(wù)提供方調(diào)用過程默認(rèn)攔截器,將攔截所有service --> <dubbo:provider filter="xxx, yyy" />
下面看下DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?/h2>
①自定義一個(gè)過濾器 DubboLoggerFilter.java
import org.apache.dubbo.rpc.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSON; /** * @Author: JCccc * @Description: dubbo請(qǐng)求和響應(yīng)攔截(記錄請(qǐng)求參數(shù)和響應(yīng)結(jié)果和時(shí)長(zhǎng)) * @Date: Create in 19:03 2021/1/26 */ public class DubboLoggerFilter implements Filter { protected Logger logger = LoggerFactory.getLogger(getClass()); /** * rpc日志最長(zhǎng)字符串 */ private final static Integer MAX_LOG_LENGTH=5000; /** * rpc日志超過長(zhǎng)度截取長(zhǎng)度 */ private final static Integer REMAINING_LOG_LENGTH=1000; @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { String methodName = invocation.getMethodName(); Object[] arguments = invocation.getArguments(); String className = invoker.getInterface().getName(); String callMethod = className + "." + methodName; String argsJson = JSON.toJSONString(arguments); logger.info("rpc接口callMethod:{}>>入?yún)?{}", callMethod, argsJson); long start = System.currentTimeMillis(); AsyncRpcResult result = (AsyncRpcResult)invoker.invoke(invocation); if(result.hasException()){ logger.info("rpc接口callMethod:{},接口耗時(shí):{},異常:{},", callMethod, System.currentTimeMillis() - start,result.getException().getMessage()); } else { Object resultString = JSON.toJSON(result.getAppResponse().getValue()); if(resultString!=null&&resultString.toString().length()>MAX_LOG_LENGTH){ resultString=resultString.toString().substring(0,REMAINING_LOG_LENGTH)+"..."; } logger.info("rpc接口callMethod:{},出參:{},接口耗時(shí):{}", callMethod,resultString , System.currentTimeMillis() - start); } return result; } }
② 加上配置
到此這篇關(guān)于DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信息的文章就介紹到這了,更多相關(guān)DUBBO 日志過濾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot啟動(dòng)的注意事項(xiàng)之不同包下有同樣名字的class類問題
這篇文章主要介紹了springboot啟動(dòng)的注意事項(xiàng)之不同包下有同樣名字的class類問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06java 異常之手動(dòng)拋出與自動(dòng)拋出的實(shí)例講解
這篇文章主要介紹了java 異常之手動(dòng)拋出與自動(dòng)拋出的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02IDEA報(bào)錯(cuò)"Cannot?resolve?symbol"問題的解決辦法
早上來了,打開idea發(fā)現(xiàn)注解等都變紅報(bào)錯(cuò)can’t resolvesymbol,由于這個(gè)錯(cuò)之前也報(bào)過,所以記錄一下,這篇文章主要給大家介紹了關(guān)于IDEA報(bào)錯(cuò)"Cannot?resolve?symbol"問題的解決辦法,需要的朋友可以參考下2023-11-11Java 中synchronize函數(shù)的實(shí)例詳解
這篇文章主要介紹了Java 中synchronize函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家理解使用synchronize函數(shù)的使用方法,需要的朋友可以參考下2017-09-09