日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-12-22 09:36:23 232觀看
導讀哈嘍,大家好,我是了不起。在Dubbo使用過程中,有一些通用參數(shù)如果顯式的在接口參數(shù)中傳遞,使用起來會有一些不方便。比如:經(jīng)常使用的用戶信息、token等上下文信息,如果都放入?yún)?shù)中傳遞,這樣會耦合到業(yè)務邏輯中了,這時隱式傳參

哈嘍,大家好,我是了不起。7yc28資訊網(wǎng)——每日最新資訊28at.com

在Dubbo使用過程中,有一些通用參數(shù)如果顯式的在接口參數(shù)中傳遞,使用起來會有一些不方便。7yc28資訊網(wǎng)——每日最新資訊28at.com

比如:經(jīng)常使用的用戶信息、token等上下文信息,如果都放入?yún)?shù)中傳遞,這樣會耦合到業(yè)務邏輯中了,這時隱式傳參就是一種比較好的處理方式了。7yc28資訊網(wǎng)——每日最新資訊28at.com

隱式傳參

Dubbo提供了RpcContext隱式傳參的方式:7yc28資訊網(wǎng)——每日最新資訊28at.com

//消費側(cè)傳入?yún)?shù)RpcContext.getContext().setAttachment(String key, String value);//服務提供側(cè)接收參數(shù)RpcContext.getContext().getAttachment(String key);

通過上面兩個方法,我們可以在消費端傳入?yún)?shù),然后在提供側(cè)就可以接收到參數(shù)了,類似于線程變量ThreadLocal7yc28資訊網(wǎng)——每日最新資訊28at.com

為了更好的兼顧Dubbo多重調(diào)用導致隱式傳參丟失的問題,我們可以在每個Dubbo服務程序中加入兩個filter可解決問題7yc28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建Filter

消費側(cè):7yc28資訊網(wǎng)——每日最新資訊28at.com

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

服務提供側(cè):7yc28資訊網(wǎng)——每日最新資訊28at.com

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是在消費端生效還是服務端生效。7yc28資訊網(wǎng)——每日最新資訊28at.com

配置filter到META-INF中

在/src/main/resources/META-INF/dubbo/下新建文件,文件名為com.alibaba.dubbo.rpc.Filter,沒錯,這就是文件的名稱,而不是包路徑。7yc28資訊網(wǎng)——每日最新資訊28at.com

文件內(nèi)容:7yc28資訊網(wǎng)——每日最新資訊28at.com

dubboProviderContextFilter=com.xxx.DubboProviderContextFilterdubboConsumerContextFilter=com.xxx.DubboConsumerContextFilter

總結(jié)

經(jīng)過以上簡單的幾步,我們在對業(yè)務代碼無侵入的情況下,通過Filter實現(xiàn)了Dubbo遠程調(diào)用中的隱式傳參。這可以方便地在服務調(diào)用鏈中傳遞一些公共的上下文信息,如登錄信息、請求ID等。7yc28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-51829-0.htmlDubbo秘密傳遞:讓你的代碼行云流水

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 中的 Time 和 Datetime 模塊

下一篇: 如何給開源項目發(fā)起提案

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 荔波县| 贵定县| 波密县| 叶城县| 肥西县| 崇左市| 渝北区| 青海省| 遂川县| 永清县| 荔波县| 山西省| 会昌县| 屏东县| 长顺县| 金华市| 巴青县| 乌兰浩特市| 和顺县| 镇江市| 布尔津县| 鲜城| 桃园县| 山阴县| 七台河市| 宁陵县| 陈巴尔虎旗| 始兴县| 砚山县| 尉犁县| 博爱县| 宁阳县| 常州市| 青冈县| 临汾市| 保亭| 盘山县| 广饶县| 东光县| 马关县| 房产|