dubbo自定义扩展
Filter
任务详情
对于Provider服务中dubbo接口以Service结尾的,返回结果添加,Hello World
。
实现方式
在Provider中自定义一个Filter,在Filter中修改返回结果。
代码
import java.util.Objects;
import org.apache.dubbo.rpc.AsyncRpcResult;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author admin
*/
public class AppendedFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(AppendedFilter.class);
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
Result result = invoker.invoke(invocation);
if (Objects.nonNull(invocation.getServiceName()) && invocation.getServiceName()
.endsWith("Service")) {
AsyncRpcResult asyncRpcResult = (AsyncRpcResult) result;
Result appResponse = asyncRpcResult.getAppResponse();
appResponse.setValue(appResponse.getValue() + ",Hello World");
}
return result;
}
}
SPI配置
在META-INF/dubbo/org.apache.dubbo.rpc.Filter文件中添加以下配置
appended=com.doudou.dubbo.filter.AppendedFilter
配置文件
在resources/application.properties
文件中添加如下配置,激活刚才的自定义 Filter 实现:
dubbo.provider.filter=appended
注意
除了通过META-INF/dubbo/org.apache.dubbo.rpc.Filter
配置激活Filter之外,还可以通过为实现类增加@Activate
注解,已在满足某些条件时自动激活Filter实现@Activate(group="provider") public class AppendedFilter implements Filter {}
处理结果
2025-03-27 20:59:41.953 INFO 8156 --- [ main] com.doudou.dubbo.consumer.Task01 : result:hello zhangsan,Hello World