偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

開(kāi)發(fā) 前端
經(jīng)過(guò)以上簡(jiǎn)單的幾步,我們?cè)趯?duì)業(yè)務(wù)代碼無(wú)侵入的情況下,通過(guò)Filter實(shí)現(xiàn)了Dubbo遠(yuǎn)程調(diào)用中的隱式傳參。這可以方便地在服務(wù)調(diào)用鏈中傳遞一些公共的上下文信息,如登錄信息、請(qǐng)求ID等。

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

在Dubbo使用過(guò)程中,有一些通用參數(shù)如果顯式的在接口參數(shù)中傳遞,使用起來(lái)會(huì)有一些不方便。

比如:經(jīng)常使用的用戶(hù)信息、token等上下文信息,如果都放入?yún)?shù)中傳遞,這樣會(huì)耦合到業(yè)務(wù)邏輯中了,這時(shí)隱式傳參就是一種比較好的處理方式了。

隱式傳參

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

//消費(fèi)側(cè)傳入?yún)?shù)
RpcContext.getContext().setAttachment(String key, String value);

//服務(wù)提供側(cè)接收參數(shù)
RpcContext.getContext().getAttachment(String key);

通過(guò)上面兩個(gè)方法,我們可以在消費(fèi)端傳入?yún)?shù),然后在提供側(cè)就可以接收到參數(shù)了,類(lèi)似于線(xiàn)程變量ThreadLocal

為了更好的兼顧Dubbo多重調(diào)用導(dǎo)致隱式傳參丟失的問(wèn)題,我們可以在每個(gè)Dubbo服務(wù)程序中加入兩個(gè)filter可解決問(wèn)題

創(chuàng)建Filter

消費(fèi)側(cè):

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);
 }
}

服務(wù)提供側(cè):

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注解指定了這個(gè)Filter是在消費(fèi)端生效還是服務(wù)端生效。

配置filter到META-INF中

在/src/main/resources/META-INF/dubbo/下新建文件,文件名為com.alibaba.dubbo.rpc.Filter,沒(méi)錯(cuò),這就是文件的名稱(chēng),而不是包路徑。

文件內(nèi)容:

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

總結(jié)

經(jīng)過(guò)以上簡(jiǎn)單的幾步,我們?cè)趯?duì)業(yè)務(wù)代碼無(wú)侵入的情況下,通過(guò)Filter實(shí)現(xiàn)了Dubbo遠(yuǎn)程調(diào)用中的隱式傳參。這可以方便地在服務(wù)調(diào)用鏈中傳遞一些公共的上下文信息,如登錄信息、請(qǐng)求ID等。

責(zé)任編輯:武曉燕 來(lái)源: Java技術(shù)指北
相關(guān)推薦

2024-12-20 13:00:00

C++編程C++17

2021-08-11 22:17:48

負(fù)載均衡LVS機(jī)制

2018-03-30 10:02:08

代碼規(guī)范維護(hù)工程師

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性能監(jiān)控

2020-04-03 14:55:39

Python 代碼編程

2022-03-08 06:41:35

css代碼

2017-09-08 12:15:54

Python代碼Pythonic

2019-12-12 09:23:29

Hello World操作系統(tǒng)函數(shù)庫(kù)

2020-12-29 08:47:45

緩沖SQL磁盤(pán)

2022-03-10 08:25:27

JavaScrip變量作用域
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)