首页 > 其他分享 >SpringBoot | Dubbo之Filter使用示例

SpringBoot | Dubbo之Filter使用示例

时间:2023-09-27 09:48:09浏览次数:50  
标签:Dubbo exception group invoke 示例 getCause Filter invoker invocation

欢迎参观我的博客,一个Vue 与 SpringBoot结合的产物:https://poetize.cn

原文链接:https://poetize.cn/article?id=39

@Activate注解可以设置过滤器的条件和顺序

String[] group():URL中的分组如果匹配则激活
String[] value():URL中如果包含该key值,则会激活
String[] before():填写扩展点列表,表示哪些扩展点要在本扩展点之前激活
String[] after():表示哪些扩展点需要在本扩展点之后激活
int order():排序信息

@Activate(group = Constants.PROVIDER, order = -1):表示在服务提供者有效

@Activate(group = Constants.CONSUMER, value = Constants.ACTIVES_KEY):表示在消费者有效

传递用户信息

@Activate(group = {CommonConstants.CONSUMER})
public class DubboConsumerContextFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        LoginUserVo user = UserContext.getLoginUser();
        if (user != null) {
            RpcContext.getServiceContext().setObjectAttachment(UserConstants.DUBBO_USER_KEY, user);
        }
        return invoker.invoke(invocation);
    }
}

@Activate(group = {CommonConstants.PROVIDER})
public class DubboProviderContextFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        Object obj = RpcContext.getServiceContext().getObjectAttachment(UserConstants.DUBBO_USER_KEY);
        if (obj == null) {
            return invoker.invoke(invocation);
        }
        try {
            UserContext.setLoginUser((LoginUserVo) obj);
            return invoker.invoke(invocation);
        } finally {
            UserContext.clear();
        }
    }
}

异常传递

@Activate(group = {CommonConstants.PROVIDER})
@Slf4j
public class ServiceExceptionFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        Result result = invoker.invoke(invocation);
        if (result.hasException() && GenericService.class != invoker.getInterface()) {
            try {
                Throwable exception = result.getException();
                if (exception.getCause() != null && exception.getCause() instanceof IOException) {
                    log.error("IOException message: {} ", exception.getCause().getMessage());
                    result.setException(new ServiceIoException((IOException) exception.getCause()));
                } else {
                    //其他异常
                    if (exception.getCause() != null) {
                        log.error("ServiceRpcException message: {} ", exception.getCause().getMessage());
                        result.setException(new ServiceRpcException((Exception) exception.getCause()));
                    }
                }
            } catch (Throwable e) {
                log.warn("Fail to ServiceExceptionFilter when called by " + RpcContext.getServiceContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e);
            }
        }
        return result;
    }
}

标签:Dubbo,exception,group,invoke,示例,getCause,Filter,invoker,invocation
From: https://www.cnblogs.com/loveer/p/17731928.html

相关文章

  • Golang method | Interfaces 示例
    方法与接口(methodInterface) packageinterFacesimport("fmt""log")//managerAppstoreonlineaccounttypeAccountstruct{surNamestringgivenNamestring}//方法的调用如果需要对调用对象做修改操作,则需要使用`*`引用其指针创建方法。func(a*Acc......
  • Python之html2text:将HTML转换为Markdown文档示例详解
    From: https://mp.weixin.qq.com/s/Pa3NDXOseyg0mIn869mbhQ-----------------------------------------------------------------------------------------hello大家好我是Monday,本文将详细介绍如何使用Python库中的html2text模块来实现将HTML转换为Markdown的操作,并提供示例......
  • VCF文件的常见FILTER汇总
    Thisfieldcontainsthename(s)ofanyfilter(s)thatthevariantfailstopass,orthevalue PASS ifthevariantpassedallfilters.IftheFILTERvalueis .,thennofilteringhasbeenappliedtotherecords.Itisextremelyimportanttoapplyappropria......
  • Dubbo是什么?Dubbo干什么?Dubbo怎么用?
    Dubbo是什么?ApacheDubbo是一款高性能的JavaRPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源JavaRPC框架,可以和Spring框架无缝集成。什么是RPC?RPC全称为remoteprocedurecall,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A......
  • checkstyle教程:Maven多模块工程的 maven-checkstyle-plugin 配置示例
    <project>...<build><pluginManagement><plugins><!--compiler在maven声明周期内置,所以后面不用声明也可使用--><plugin><groupId>org.apache.maven.plugins......
  • ansible教程:with_fileglob基本用法示例
    with_fileglob是Ansible的循环迭代器,用于在任务中对文件进行模式匹配并迭代处理。它可以用于从本地文件系统中选择匹配特定模式的文件,并将它们作为迭代项传递给任务。以下是with_fileglob的基本用法示例:-name:Processfiles<module_name>:src:"{{item}}"with_......
  • Dubbo配置
    Dubbo配置配置原则:JVM启动-D参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。XML次之,如果在XML中有配置,则dubbo.properties中的相应配置项无效。Properties最后,相当于缺省值,只有XML没有配置时,dubbo.properties的相应配置项......
  • 将Winform窗体程序缩到System tray的示例代码
    网上有很多将Winform窗体缩到Systemtray的示例,但多数不好用.这里是一个简单示例,使用了Visualstudio自带的NotifyIcon控件和一个快捷菜单contextMenuStrip控件.增加一个contextMenuStrip控件,新增两个菜单项:显示界面和退出系统.增加一个NotifyIcon控件,设置它......
  • [SpringSecurity5.6.2源码分析十三]:LogoutFilter
    前言• SpringSecurity默认提供了登录的页面以及登录的接口,与之对应的也提供了登出页和登出请求• 登出请求对应的过滤器是LogoutFilter• 登出页对应的是DefaultLogoutPageGeneratingFilter、1.LogoutConfigurer• LogoutConfigurer是LogoutFilter对应的配置类,先看其主要方法......
  • R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例|附代码数据
    原文链接:http://tecdat.cn/?p=21545原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于贝叶斯推断的研究报告,包括一些图形和统计输出。示例1:使用MCMC的指数分布采样任何MCMC方案的目标都是从“目标”分布产生样本。在这种情况下,我们将使用平均值为1的指数分布作为我们......