栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

springboot2 + dubbo 2.7消费者端(consumer)拦截器配置

springboot2 + dubbo 2.7消费者端(consumer)拦截器配置

网上大多讲解了dubbo提供者(provider)拦截器的配置方式,却没有对消费端(consumer)端拦截器的使用进行详细说明,本问提供了一个最简的消费端拦截器配置demo。

废话不多说,直接开始

使用消费端拦截器的目的:发送dubbo请求时携带参数,如:appId,token等

直接上代码(新手建议直接拷贝代码,调试成功再重命名)

第一步:检查dubbo依赖版本。注意:dubbo必须时2.7.3以上版本,否则没有ListenableFilter


    ......
    2.7.3

    org.apache.dubbo
    dubbo-spring-boot-starter
    2.7.3
第二步:创建过滤器类(xxx.ConsumerFilter)
package xxx;

import com.zdzy.freight.common.InterceptorCom;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

//dubbo消费者拦截器
@Activate(group = CommonConstants.CONSUMER, order = -10000)
public class ConsumerFilter extends ListenableFilter {

    @Autowired
    InterceptorCom interceptorCom;

    public ConsumerFilter() {
        super.listener = new ConsumerContextListener();
    }

    @Override
    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException            {
        
        if (invocation instanceof RpcInvocation) {
            ((RpcInvocation) invocation).setInvoker(invoker);
        }
        try {
            RpcContext.removeServerContext();
            return invoker.invoke(invocation);
        } finally {
            RpcContext.removeContext();
        }
    }

    static class ConsumerContextListener implements Listener {
        @Override
        public void onResponse(Result appResponse, Invoker invoker, Invocation invocation) {
            RpcContext.getServerContext().setAttachments(appResponse.getAttachments());
        }

        @Override
        public void onError(Throwable t, Invoker invoker, Invocation invocation) {
            System.out.println("dubbo消费者拦截器发生了异常");
        }
    }
}

第三步:配置文件(yml)

dubbo
  consumer:
    filter: consumerFilter

第四步:resource下创建目录(meta-INF.dubbo.internal )和文件(org.apache.dubbo.rpc.Filter),并设置内容为:consumerFilter=xxx.ConsumerFilter

meta-INF / dubbo / internal / org.apache.dubbo.rpc.Filter

经过以上四步,dubbo的消费端拦截器就配置完成

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682070.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号