自定義dubbofilter
在使用dubbo框架的時候可以使用filter去實現一些攔截功能和調整攔截順序,在每次調用的過程中,Filter的攔截都會被執行。當然除了Dubbo默認的filter,用戶也可以自定義dubbo filter來實現對應的功能。這裏記錄一個遇到的spi文件路徑問題。
問題現象
在測試自定義一個dubbo filter之後,發現並沒有生效。
對應的filter代碼:
@Activate(group = Constants.PROVIDER, order = Integer.MIN_VALUE)
public class HelloFilter implements Filter {
/**
* @param invoker
* @param invocation
* @return
* @throws RpcException
*/
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
System.out.println("filter調用了");
return invoker.invoke(invocation);
}
}
對應的spi文件內容:
dubboLoggerFilter=com.xxx.demo.xxx.filter.HelloFilter
經過排查之後發現代碼寫的沒啥問題,但dubbo並沒有加載這個自定義filter的spi。隱約感覺是路徑問題。
問題解決
因爲是對應一個已生效的filter去設置的,所以當時看到已有項目中的文件是這樣的:
所以在建立spi文件的文件目錄時直接new了一個目錄名字叫做META-INF.dubbo。但其實看官方blog中的介紹是要在maven資源文件下建立如下的結果的spi文件:
這裏恍然大悟才發現自己的目錄路徑建立錯誤了。
這裏其實是idea展示的一個坑,比如我在現在改對的基礎上去建立META-INF.dubbo目錄,其實是和正確目錄展示是一樣的:
但是在你提交git文件的時候,其實是能明顯看到對應的差別的:
這裏記錄下踩到的這個坑。