成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Dubbo秘密傳遞:讓你的代碼行云流水

開發 前端
經過以上簡單的幾步,我們在對業務代碼無侵入的情況下,通過Filter實現了Dubbo遠程調用中的隱式傳參。這可以方便地在服務調用鏈中傳遞一些公共的上下文信息,如登錄信息、請求ID等。

哈嘍,大家好,我是了不起。

在Dubbo使用過程中,有一些通用參數如果顯式的在接口參數中傳遞,使用起來會有一些不方便。

比如:經常使用的用戶信息、token等上下文信息,如果都放入參數中傳遞,這樣會耦合到業務邏輯中了,這時隱式傳參就是一種比較好的處理方式了。

隱式傳參

Dubbo提供了RpcContext隱式傳參的方式:

//消費側傳入參數
RpcContext.getContext().setAttachment(String key, String value);

//服務提供側接收參數
RpcContext.getContext().getAttachment(String key);

通過上面兩個方法,我們可以在消費端傳入參數,然后在提供側就可以接收到參數了,類似于線程變量ThreadLocal

為了更好的兼顧Dubbo多重調用導致隱式傳參丟失的問題,我們可以在每個Dubbo服務程序中加入兩個filter可解決問題

創建Filter

消費側:

import java.util.HashMap;
import java.util.Map;

import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.fastjson.JSONObject;

@Activate(group = {Constants.CONSUMER})
public class DubboConsumerContextFilter implements Filter {
 
 @Override
 public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
  RpcContext.getContext().setAttachment("token", "tokenvalue");
  return invoker.invoke(invocation);
 }
}

服務提供側:

import java.util.Map;

import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.fastjson.JSONObject;

@Activate(group = {Constants.PROVIDER})
public class DubboProviderContextFilter implements Filter {
 @Override
 public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
  // 處理token
  String token = RpcContext.getContext().getAttachment("token");
        //TODO 處理代碼
  return invoker.invoke(invocation);
 }
}

其中@Activate注解指定了這個Filter是在消費端生效還是服務端生效。

配置filter到META-INF中

在/src/main/resources/META-INF/dubbo/下新建文件,文件名為com.alibaba.dubbo.rpc.Filter,沒錯,這就是文件的名稱,而不是包路徑。

文件內容:

dubboProviderContextFilter=com.xxx.DubboProviderContextFilter
dubboConsumerContextFilter=com.xxx.DubboConsumerContextFilter

總結

經過以上簡單的幾步,我們在對業務代碼無侵入的情況下,通過Filter實現了Dubbo遠程調用中的隱式傳參。這可以方便地在服務調用鏈中傳遞一些公共的上下文信息,如登錄信息、請求ID等。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2024-12-20 13:00:00

C++編程C++17

2021-08-11 22:17:48

負載均衡LVS機制

2018-03-30 10:02:08

代碼規范維護工程師

2010-01-04 19:08:41

Silverlight

2018-11-28 13:23:19

Kagglefeatexp特征

2010-08-27 13:41:30

UPS

2025-03-11 08:30:00

Pythonretrying代碼

2024-05-30 14:21:00

lambdaPython代碼

2011-04-13 10:51:58

MATLAB

2019-01-29 05:34:47

GitHub插件代碼

2023-12-12 08:41:01

2010-08-23 09:56:09

Java性能監控

2020-04-03 14:55:39

Python 代碼編程

2022-03-08 06:41:35

css代碼

2017-09-08 12:15:54

Python代碼Pythonic

2022-08-28 10:08:53

前端代碼前端

2019-12-12 09:23:29

Hello World操作系統函數庫

2022-03-10 08:25:27

JavaScrip變量作用域
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩毛片视频 | 自拍偷拍一区二区三区 | 午夜视频一区二区 | 一级片片| 国产精品一区二区三 | 亚洲热在线视频 | 国产伦一区二区三区视频 | 一级一级毛片免费看 | 国产精品视频999 | 中文字幕乱码一区二区三区 | 99久久婷婷国产精品综合 | 天天插天天干 | 麻豆精品久久久 | 久久久国产一区 | 91久久久久久 | 亚洲91| 黄网站免费观看 | 96国产精品久久久久aⅴ四区 | 午夜资源| 91精品国产一区二区三区动漫 | 久久久久久综合 | 国产精品视屏 | 久久中文字幕视频 | 婷婷久久久久 | 国产精品一区二区视频 | 久久精品亚洲一区 | 欧美日一区二区 | 国产一区久久 | 一区二区三区视频在线观看 | 不卡一二区 | 国产一区2区 | 色综合久 | 亚洲91 | 午夜色播| 久久久999成人 | 中文字幕在线一区 | 久久国产精品72免费观看 | 91精品国产一区二区三区 | 国产在线精品一区二区 | 成人午夜网站 | 一区二区三区免费 |