dubbo3 filter(過濾器)如何自定義過濾器
dubbo3 filter(過濾器)
簡介
- 類似于 java web 中的 filter
- 也和 spring mvc 中的 intercaptor
- 在請求的發(fā)送后或者是請求到達前集中的做一些預處理工作
- 在 dubbo 中也會通過過濾器來完成限流和監(jiān)控的工作
dubbo 過濾器運行時機
consumer 在調用的時候負載均衡已經選擇了一個具體的實例進行調用,那么會依次執(zhí)行 conusmer 端端調用鏈(調用鏈是 filter),然后到達 provider ,會繼續(xù)執(zhí)行 provider 的調用鏈(這里是 filter),完成響應的時候也會依次調用這些鏈


自定義 filter
在 dubbo 中自定義 filter 可以有兩種方式。
第一種 @Active 注解激活
在項目目錄下面創(chuàng)建文件夾 META-INF/dubbo 下面創(chuàng)建 filter 的權限定類名,(org.apache.dubbo.rpc.Filter),然后在文件內部寫入我們的注冊信息,名字=自定義 filter 的權限定類名,注冊成功以后需要激活我們的配置,@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 的設置是表示他運行在 consumer 還是 provider 端,這是必須要要配置的
public class MyProviderFilter implements Filter {
/**
* @param invoker 實際這次的調用
* @param invocation 本次調用的參數
* @return 調用結果,這里的調用結果是從 provider 端調用過來的
*/
@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 中設置的 key
例如我們剛剛設置的 myProviderFilter(這里的源碼服用了第一種里面的)
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決執(zhí)行maven命令時提示Process terminated的問題
這篇文章主要介紹了解決執(zhí)行maven命令時提示Process terminated的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
spring-data-jpa使用自定義repository來實現原生sql
這篇文章主要介紹了在spring-data-jpa中使用自定義repository來實現原生sql,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot在自定義類中調用service層mapper層方式
這篇文章主要介紹了SpringBoot在自定義類中調用service層mapper層方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

