dubbo3 filter(過濾器)如何自定義過濾器
dubbo3 filter(過濾器)
簡介
- 類似于 java web 中的 filter
- 也和 spring mvc 中的 intercaptor
- 在請求的發(fā)送后或者是請求到達前集中的做一些預(yù)處理工作
- 在 dubbo 中也會通過過濾器來完成限流和監(jiān)控的工作
dubbo 過濾器運行時機
consumer 在調(diào)用的時候負載均衡已經(jīng)選擇了一個具體的實例進行調(diào)用,那么會依次執(zhí)行 conusmer 端端調(diào)用鏈(調(diào)用鏈是 filter),然后到達 provider ,會繼續(xù)執(zhí)行 provider 的調(diào)用鏈(這里是 filter),完成響應(yīng)的時候也會依次調(diào)用這些鏈
自定義 filter
在 dubbo 中自定義 filter 可以有兩種方式。
第一種 @Active 注解激活
在項目目錄下面創(chuàng)建文件夾 META-INF/dubbo 下面創(chuàng)建 filter 的權(quán)限定類名,(org.apache.dubbo.rpc.Filter),然后在文件內(nèi)部寫入我們的注冊信息,名字=自定義 filter 的權(quán)限定類名,注冊成功以后需要激活我們的配置,@Activate(group = CommonConstants.PROVIDER)
myProviderFilter=com.rpc.dubbo.provider.filter.MyProviderFilter
代碼:
package com.rpc.dubbo.provider.filter; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.rpc.*; /** * @author xl-9527 * @since 2025/1/11 **/ @Slf4j @Activate(group = CommonConstants.PROVIDER) // active 中 group 的設(shè)置是表示他運行在 consumer 還是 provider 端,這是必須要要配置的 public class MyProviderFilter implements Filter { /** * @param invoker 實際這次的調(diào)用 * @param invocation 本次調(diào)用的參數(shù) * @return 調(diào)用結(jié)果,這里的調(diào)用結(jié)果是從 provider 端調(diào)用過來的 */ @Override public Result invoke(final Invoker<?> invoker, final Invocation invocation) throws RpcException { System.out.println("invoker.getUrl() = " + invoker.getUrl()); System.out.println("invocation.getMethodName() = " + invocation.getMethodName()); System.out.println("invocation.getServiceModel().getServiceName() = " + invocation.getServiceModel().getServiceName()); log.info("MyProviderFilter invoke"); return invoker.invoke(invocation); } }
第二種使用 @DubboService(filter=“key”)
這種方式需要直接在 service 中配置我們在 SPI 中設(shè)置的 key
例如我們剛剛設(shè)置的 myProviderFilter(這里的源碼服用了第一種里面的)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Callable的對象中,用@Autowired注入別的對象失敗問題
這篇文章主要介紹了解決Callable的對象中,用@Autowired注入別的對象失敗問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07一篇文章帶你入門Java數(shù)據(jù)結(jié)構(gòu)
這篇文章主要介紹了Java常見數(shù)據(jù)結(jié)構(gòu)面試題,帶有答案及解釋,希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望可以幫助到你2021-08-08SpringBoot實現(xiàn)返回值數(shù)據(jù)脫敏的步驟詳解
這篇文章主要給大家介紹一下SpringBoot實現(xiàn)返回值數(shù)據(jù)脫敏的步驟,文章通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2023-07-07Springboot?手動分頁查詢分批批量插入數(shù)據(jù)的實現(xiàn)流程
這篇文章主要介紹了Springboot?手動分頁查詢分批批量插入數(shù)據(jù)的實現(xiàn)流程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07